字符串格式和 Kwargs
Strings Formatting and 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)
以下代码returns错误:
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)
Returns: NameError: 名称 'fruit' 未定义
我该如何正确格式化它?而且,为什么它不像我尝试的那样工作?是因为**kwargs吗?
感谢您的帮助和解释。
关闭,应该是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):
然后 fruit
和 veggie
名称将在本地为您的函数所知,此外还有 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)
以下代码returns错误:
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)
Returns: NameError: 名称 'fruit' 未定义
我该如何正确格式化它?而且,为什么它不像我尝试的那样工作?是因为**kwargs吗?
感谢您的帮助和解释。
关闭,应该是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):
然后 fruit
和 veggie
名称将在本地为您的函数所知,此外还有 kwargs
字典中未定义的关键字参数。