Python 字符串格式和Kwargs
以下代码正常工作:Python 字符串格式和Kwargs,python,python-3.x,f-string,Python,Python 3.x,F String,以下代码正常工作: def myfunc(**kwargs): if 'fruit' in kwargs: print('my fruit of choice is {}'.format(kwargs['fruit'])) else: print('No Fruit Here') myfunc(fruit = 'apple', veggie = 'lettuce) 以下代码返回一个错误: def myfunc(**kwargs): if 'fruit' in kwargs:
def myfunc(**kwargs):
if 'fruit' in kwargs:
print('my fruit of choice is {}'.format(kwargs['fruit']))
else:
print('No Fruit Here')
myfunc(fruit = 'apple', veggie = 'lettuce)
以下代码返回一个错误:
def myfunc(**kwargs):
if 'fruit' in kwargs:
print(f'my fruit of choice is {fruit}')
else:
print('No Fruit Here')
myfunc(fruit = 'apple', veggie = 'lettuce)
返回:NameError:未定义名称“水果”
如何正确设置格式?还有,为什么它不能像我所尝试的那样工作呢?是因为**夸尔格吗
谢谢您的帮助和解释。关闭时,它应该是
kwargs['fruit']
,因为kwargs
是一个dict
包含所有函数参数
def myfunc(**kwargs):
print(kwargs)
if 'fruit' in kwargs:
print(f"my fruit of choice is {kwargs['fruit']}")
else:
print('No Fruit Here')
myfunc(fruit = 'apple', veggie = 'lettuce')
#{'fruit': 'apple', 'veggie': 'lettuce'}
#my fruit of choice is apple
问题是这两种情况并不相同。在第一种情况下:
print('my fruit of choice is {}'.format(kwargs['fruit']))
您指的是存在的对象kwargs['fruit']
。这将转换为f字符串:
print(f'my fruit of choice is {kwargs["fruit"]}')
在第二种情况下,f字符串等效于:
print('my fruit of choice is {}'.format(fruit))
由于名为fruit
的对象不存在,因此会出现相同的错误
这是因为您的函数使用了数量可变的kwargs
,这实际上为您的函数创建了一个名为kwargs
的dict
,供本地引用。但是,如果您已将函数创建为:
def myfunc(fruit=None, veggie=None, **kwargs):
然后,除了
kwargs
目录中未定义的关键字参数外,函数本地还可以知道fruit
和veggie
的名称。在这两种情况下,名称fruit
都不存在。这是一个kwargs
的字符串键。如果kwargs['fruit']
在第一种情况下有效,为什么不尝试print(我选择的水果是{kwargs['fruit']})
?