Python:根据 kwarg 键检查参数名称
Python: Checking parameter names against kwarg keys
抱歉这个天真的问题,但是在执行这段代码时:
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' 未定义
然而 print(str(key)) 正确输出 'fn'。
所以这是怎么回事;为什么测试失败以及如何根据可能的参数名称检查密钥?
kwargs
是一个字典,其中键是字符串,值是传入的那些值。您可以通过用于传递它的字符串键提取特定的 kwarg:
if "fn" in kwargs:
fn = kwargs["fn"]
您也可以这样做:
fn = kwargs.get("fn")
if fn is not None:
... # do something with `fn`
key
是您传递的键名的字符串,因此您必须将其与另一个字符串进行比较。
应该是:
if key=="fn":
print(value(10))
args 和 kwargs 的类型
如你所见,args 是一个 tuple 并且 kwargs 是一个 词典.
def test_kwargs2(*args, **kwargs):
print(type(args))
print(type(kwargs))
test_kwargs2(1, 2, 3, 4, a=1, b=2, c=3)
输出
<class 'tuple'>
<class 'dict'>
在django-3.8 you can use Assignment expressions(the walrus operator)
def test_kwargs(n, **kwargs):
if func := kwargs.get('fn'): # like dict
print(func(n))
test_kwargs(3, fn=lambda x: x ^ 2)
test_kwargs(3)
输出:
1
抱歉这个天真的问题,但是在执行这段代码时:
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' 未定义
然而 print(str(key)) 正确输出 'fn'。
所以这是怎么回事;为什么测试失败以及如何根据可能的参数名称检查密钥?
kwargs
是一个字典,其中键是字符串,值是传入的那些值。您可以通过用于传递它的字符串键提取特定的 kwarg:
if "fn" in kwargs:
fn = kwargs["fn"]
您也可以这样做:
fn = kwargs.get("fn")
if fn is not None:
... # do something with `fn`
key
是您传递的键名的字符串,因此您必须将其与另一个字符串进行比较。
应该是:
if key=="fn":
print(value(10))
args 和 kwargs 的类型
如你所见,args 是一个 tuple 并且 kwargs 是一个 词典.
def test_kwargs2(*args, **kwargs):
print(type(args))
print(type(kwargs))
test_kwargs2(1, 2, 3, 4, a=1, b=2, c=3)
输出
<class 'tuple'>
<class 'dict'>
在django-3.8 you can use Assignment expressions(the walrus operator)
def test_kwargs(n, **kwargs):
if func := kwargs.get('fn'): # like dict
print(func(n))
test_kwargs(3, fn=lambda x: x ^ 2)
test_kwargs(3)
输出:
1