【发布时间】:2023-03-17 05:58:02
【问题描述】:
抱歉这个幼稚的问题,但是在执行这段代码时:
def test_kwargs(n, **kwargs):
if kwargs is None:
print("no keyword args")
return
for key, value in kwargs.items():
print(str(key))
print(str(value))
if key==fn:
print(value(10))
test_kwargs(3,fn=lambda x: x^2)
我在检查中遇到错误
if key==fn
NameError: name 'fn' is not defined
但是 print(str(key)) 正确输出了 'fn'。
那么这里发生了什么;为什么测试会失败?如何根据可能的参数名称检查密钥?
【问题讨论】:
-
**kwargs成为字典。所以kwargs['fn']将包含你的 lambda 函数。 -
@TedKleinBergman 您可能已经注意到我已将 kwarg['fn'] 分配给 value 并且可以调用 lambda 函数;所以这不是问题。我想回答这个问题,即为什么平等测试失败而不是一些不相关的琐事。
-
相等性测试失败,因为
fn不是您定义的。当您使用关键字参数调用您的函数时,它会被放入字典kwargs并且可以通过kwargs['fn']访问。 IE。您必须像检查任何其他字典一样检查关键字是否存在于kwargs中。