【问题标题】:unpacking function argument [duplicate]解包函数参数[重复]
【发布时间】:2012-09-28 23:05:28
【问题描述】:

如果一个函数接受 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( ... ))

【问题讨论】:

    标签: python function


    【解决方案1】:

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

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

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

    你的例子是:

    func1(*func2(...))
    

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

    请参阅documentation on call expressions,有关函数签名镜像语法,请参阅documentation on function definitions

    【讨论】:

      【解决方案2】:

      这叫做参数解包,写成:

      func1(*func2(...))
      

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

      【讨论】:

        猜你喜欢
        • 2017-06-20
        • 1970-01-01
        • 2015-02-09
        • 2020-04-20
        • 1970-01-01
        • 2019-04-14
        • 1970-01-01
        • 2015-12-10
        • 1970-01-01
        相关资源
        最近更新 更多