解包函数参数

如果一个函数需要n个参数,并且还有另一个函数返回一个包含n个项目的序列(或者我有一个包含n个项目的序列),那么有没有办法“映射”这两个函数第一个函数以n个项目序列作为input和返回结果)我不想(也许不能在某些场合)自己编辑函数并更改它的参数参数和返回值types。

即)

def func1(x, y, z): return x+y+z def func2(w): return [i for i in range(w,w+3)] 

不能func1(func2( ... ))在这种情况下。

您正在查找*args参数语法:

 >>> def foo(bar, baz, spam): ... print bar, baz, spam ... >>> arguments = [1, 2, 3] >>> foo(*arguments) 1, 2, 3 

将parameter passing给可调用对象时,任何以* asterix开头的expression式将被解释为一系列位置参数,并被扩展为作为独立parameter passing给被调用对象(函数,方法等)。

对于你的例子,将是:

 func1(*func2(...)) 

有一个关键字等价物使用**双星号(需要映射),并且您也可以在函数签名中使用相同的语法。

有关调用expression式的文档以及函数签名镜像语法,请参阅函数定义的文档 。

这就是所谓的参数拆包,写成:

 func1(*func2(...)) 

参考: https : //docs.python.org/2/tutorial/controlflow.html#unpacking-argument-lists