在Python中将关键字参数作为必需参数传递

时间:2015-04-19 15:41:51

标签: python

例如,我有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)

2 个答案:

答案 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。这一切都取决于您传递给函数的对象的抽象级别。在你的情况下,你传递一本字典,这样你就可以不仅仅处理那个人了。