繁体   English   中英

在python中部分解压缩参数

[英]Partially unpack parameters in python

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

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

那么,是否有更清洁的方式来处理这种情况?

如果你说出你的论点; 然后你可以随意进行:

>>> 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))

我不知道这清洁,但因为我们谈论的是偏见...

from functools import partial
sum_ = partial(add,*xy)(3)

这个问题很早就在2007年提出过了。你可以在这看看它 - http://www.python.org/dev/peps/pep-3132

虽然它可能不会出现在py3.4中,但它肯定被Guido接受并且被提议进入一些python 3版本。

sum = add(3, *xy)

希望这样做。 python中方法声明的原型是:

def method1(arg1,arg2, *args, **kwargs):
    ....your code.....

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM