我知道在Python中我们可以从元组或列表中解压缩参数:
def add(x,y,z):
return x + y + z
xyz = (1,2,3)
s = add(*xyz)
但是完成这样的事情的正确方法是什么:
xy = (1,2)
s = add(*xy, 3)
SyntaxError:只有命名参数可以跟*表达式
我可以这样做:
s = add(*xy + (3,))
但是看起来丑陋且可读性差,如果我在那里有更多的变量,那将是非常混乱的。
那么,有没有更简洁的方法来处理这种情况?
答案 0 :(得分:2)
如果你说出你的论点;然后你可以随意进行:
>>> def foo(x=None,y=None,z=None):
... return x+y+z
...
>>> s = foo(*(1,2),z=3)
>>> s
6
现在,如果您这样做,则无法覆盖关键字参数,因此foo(*(1,2), y=3)
将无效;但您可以根据需要切换订单foo(z=3, *(1,2))
。
答案 1 :(得分:1)
我不知道这是很多更干净,但因为我们谈论的是偏见...
from functools import partial
sum_ = partial(add,*xy)(3)
答案 2 :(得分:1)
很久以前就提出了这个问题。你可以在这里看一看 - http://www.python.org/dev/peps/pep-3132
尽管它可能不会出现在py3.4中,但它肯定被Guido&建议进入一些python 3版本。
答案 3 :(得分:0)
sum = add(3, *xy)
希望这样做。 python中方法声明的原型是:
def method1(arg1,arg2, *args, **kwargs):
....your code.....