解包函数参数

15
如果一个函数需要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个回答

18

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

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

当向可调用对象传递参数时,以 * 为前缀的任何表达式都会被解释为一系列位置参数,并展开为单独的参数传递给被调用的对象(函数、方法等)。

对于您的示例,应该这样写:

func1(*func2(...))

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

请查看调用表达式相关文档和与函数签名镜像语法相关的函数定义文档


12

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接