例如,我有3个函数,带有必需的参数(函数共享一些参数,顺序不同):
def function_one(a,b,c,d,e,f):
value = a*b/c ...
return value
def function_two(b,c,e):
value = b/e ..
return value
def function_three(f,a,c,d):
value = a*f ...
return value
如果我有下一本字典:
argument_dict = {'a':3,'b':3,'c':23,'d':6,'e':1,'f':8}
是否可以这样调用函数??:
value_one = function_one(**argument_dict)
value_two = function_two (**argument_dict)
value_three = function_three (**argument_dict)
答案 0 :(得分:4)
不是你编写这些函数的方式,不是:他们不期望额外的参数,因此会引发TypeError。
如果您将所有功能定义为期望**kwargs
,那么事情将按您的意愿运作。
答案 1 :(得分:1)
我假设您尝试做的是创建一个具有未定义数量的参数的函数。您可以使用args(arguments)或kwargs(关键字参数类型为foo =' bar')样式来执行此操作,例如:
参数
def f(*args): print(args)
f(1, 2, 3)
(1, 2, 3)`
然后是kwargs
def f2(**kwargs): print(kwargs)
f2(a=1, b=3)
{'a': 1, 'b': 3}
让我们尝试更多的东西。
def f(my_dict): print (my_dict['a'])
f(dict(a=1, b=3, c=4))
1
有效!!!所以,你可以这样做,如果你不知道这个功能可以接收什么,你可以用kwargs补充它。
当然可以这样做:
argument_dict = {'a':1, 'b':3, 'c':4}
f(argument_dict)
1
所以你不必一直使用kwargs和args。这一切都取决于您传递给函数的对象的抽象级别。在你的情况下,你传递一本字典,这样你就可以不仅仅处理那个人了。