我们知道,Python函数中带有两个星号的参数会接收可变长的关键字参数,然后打包成一个字典,将变量名作为字典的键:
def test_fun(a, **b):
print(a, b)
num = 'hhh'
test_fun(1, num=3)
输出:
1 {'num': 3}
显然,即使我们指定了num= ‘hhh’,但是键仍然是’num’而不是’hhh’。
为了处理这种情况,一般会先写一个字典保存再将字典解包:
def test_fun(a, **b):
print(a, b)
num_dict = {'hhh':3}
test_fun(1, **num_dict)
输出:
1 {'hhh': 3}
但是这违背了可变长的初衷,不如直接将b定义为字典变量,传入字典。
一些可能的尝试是失败的,甚至会报错,例如将num=3改为str(num)=3、f’{num}'=3、eval(‘num’)=3等。
下面介绍一种有点阴间的写法,是有效的,但是不建议使用:
def test_fun(a, **b):
print(a, b)
num = 'hhh'
eval(f'test_fun(1, {num}=3)')
输出:
1 {'hhh': 3}