解包函数参数

时间:2012-10-08 16:58:14

标签: python function

如果一个函数需要n个参数,并且有另一个函数返回一个包含n个项目的序列(或者我有一个包含n个项目的序列),有没有办法“映射”这两个函数(或使第一个函数采用n个项目的序列作为输入和返回结果)我不希望(也许在某些情况下不能)自己编辑函数并更改其参数参数和返回值类型。

即)

def func1(x, y, z):
    return x+y+z

def func2(w):
    return [i for i in range(w,w+3)]
在这种情况下,

func1(func2( ... ))

2 个答案:

答案 0 :(得分:14)

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

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

将参数传递给callable时,任何以* asterix开头的表达式都被解释为位置参数序列,并扩展为作为被调用对象的单独参数传递(函数,方法等) )。

对于你的例子:

func1(*func2(...))

使用**双星号(采用映射)有一个等效的关键字,你也可以在函数签名中使用相同的语法。

请参阅documentation on call expressions,并了解函数签名镜像语法documentation on function definitions

答案 1 :(得分:11)

它被称为参数解包,写成:

func1(*func2(...))

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