在python中访问kwargs时,打印格式、速记不起作用

在python中访问kwargs时,打印格式、速记不起作用,python,Python,我注意到,若要在python中打印specefic键的kwargs,当我将关键字放在print语句前面时,会出现一个错误,如下所示 def myfunc(*args, **kwargs): ''' sut min dodo funktionen''' print(f'i would like {args[0]} and {kwargs['food']}') #gives error print('I would like {} and {}'.format(args[0], kwargs['do

我注意到,若要在python中打印specefic键的kwargs,当我将关键字放在print语句前面时,会出现一个错误,如下所示

def myfunc(*args, **kwargs):
''' sut min dodo funktionen'''
print(f'i would like {args[0]} and {kwargs['food']}') #gives error
print('I would like {} and {}'.format(args[0], kwargs['dodo'])) #works fine
我得到的错误如下

File "<ipython-input-49-5f229585e335>", line 3
print(f'i would like {args[0]} and {kwargs['food']}')
                                               ^
SyntaxError: invalid syntax
文件“”,第3行
打印(f'i想要{args[0]}和{kwargs['food']})
^
SyntaxError:无效语法

为什么第二个可以正常工作,但第一个不能工作,即使逻辑基本相同,只是语法和操作不同?

那么,
f'{a['b']}'
语法有效吗?如何解析这个表达式?这是一个单引号字符串吗

不,不是。它被解析为:

f'{a[' # f-string
b      # what's this?
']}'   # regular string
正如您所看到的,这个
b
实际上不是字符串的一部分,因为一对匹配的单引号表示字符串。它可以被视为变量名,但Python的语法不允许这样做。同样的问题可以通过一个简单的例子来说明:

'I'm a string, y'all!'
它的解析如下:

'I'           # a string
m a string, y # ??!!
'all!'        # a string
您可以使用不同的引号:

print(f'i would like {args[0]} and {kwargs["food"]}')

那么,
f'{a['b']}'
的语法有效吗?如何解析这个表达式?这是一个单引号字符串吗

不,不是。它被解析为:

f'{a[' # f-string
b      # what's this?
']}'   # regular string
正如您所看到的,这个
b
实际上不是字符串的一部分,因为一对匹配的单引号表示字符串。它可以被视为变量名,但Python的语法不允许这样做。同样的问题可以通过一个简单的例子来说明:

'I'm a string, y'all!'
它的解析如下:

'I'           # a string
m a string, y # ??!!
'all!'        # a string
您可以使用不同的引号:

print(f'i would like {args[0]} and {kwargs["food"]}')
print(我想要{args[0]}和{kwargs['food']})
这里
printf
需要一个字符串,但是
'i想要{args[0]}和{kwargs['food']}'
不是字符串-它是两个字符串,夹着一个未知标识符(
food

'我想要{args[0]}和{kwargs['
+
食物
+
']}

请尝试以下方法:

print(f“我想要{args[0]}和{kwargs['food']}”)
打印(我想要{args[0]}和{kwargs['food']})
这里
printf
需要一个字符串,但是
'i想要{args[0]}和{kwargs['food']}'
不是字符串-它是两个字符串,夹着一个未知标识符(
food

'我想要{args[0]}和{kwargs['
+
食物
+
']}

请尝试以下方法:

print(f“我想要{args[0]}和{kwargs['food']}”)

为什么在第二个print语句中有一个f?这些是在python 3.6Thanks中引入的,我在python@Valentino是的,非常感谢您详细解释为什么在第二个print语句中有一个f?这些都是在python3.6Thanks中介绍的,我在python@Valentino是的,非常感谢您的详细说明