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'>

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