在python中部分解压缩参数

时间:2013-11-19 06:11:47

标签: python python-2.7

我知道在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,))

但是看起来丑陋且可读性差,如果我在那里有更多的变量,那将是非常混乱的。

那么,有没有更简洁的方法来处理这种情况?

4 个答案:

答案 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.....