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']})