[英]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.