我正在尝试从任意字典中为函数设置参数。例如,如果我有
d = {"a": 5, "b": 8}
我想定义一个这样的函数
def f(a = 5, b = 8) :
print(a, b)
但是没有指定参数,所以最终我还是想做
def f(**d):
print(a,b)
但是显然这是行不通的,它只在我们调用该函数时才起作用,而不是在定义函数时才起作用,感谢您的帮助。
答案 0 :(得分:3)
您可以在函数中同时使用默认值和** kwargs:
> def f(a=5, b=7, **kwargs):
> print(a, b)
> f()
5, 7
> f(1, 2)
1, 2
> f(**{'a':20, 'b': 40})
20, 40
> f(**{'a':20})
20, 7
> f(a=300, **{'b':100})
300, 100
> # Okay
> f(3, **{'b':20})
3, 20
> # Not Okay
> f(3, **{'a':20})
TypeError: f() got multiple values for argument 'a'
答案 1 :(得分:1)
您可以通过在字典上使用**
(字典拆包)运算符将任意一组关键字参数传递给函数,并且可以使用相同的函数定义函数来处理一组此类关键字参数操作员。一旦进入函数,定义中指定的变量的行为就类似于dict
。示例:
def f(**kwargs):
print(kwargs["a"], kwargs["b"])
d = {"a": 5, "b": 8}
f(**d)
f(a=5, b=8) # this behaves the same way
在处理.get()
字典时,使用**kwargs
函数通常也更安全,因为这样可以在未将给定键作为变量传递的情况下设置默认值。例如:
def f(**kwargs):
a = kwargs.get('a', 5)
b = kwargs.get('b', 8)
print(a, b)
f(a=9, b=13) # prints 9 13
f() # prints 5 8
答案 2 :(得分:0)
事实上,我找到了一种方法来实现我的初衷
d = {"a": 5, "b": 8}
def f(**kwargs) :
c = d.copy()
c.update(kwargs)
print(c["a"], c["b"])
通过这种方式,我不必在函数内部一个一个地设置参数(对于要解决的实际问题,我有一个非常大的字典),而且不必为定义功能