首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将多个列表解包为函数的参数

将多个列表解包为函数的参数
EN

Stack Overflow用户
提问于 2014-02-28 22:37:55
回答 7查看 9.8K关注 0票数 20

如果我有一个像这样的函数:

代码语言:javascript
复制
def f(a,b,c,d):
    print a,b,c,d

那么为什么这样做是可行的:

代码语言:javascript
复制
f(1,2,3,4)
f(*[1,2,3,4])

但不是这样的:

代码语言:javascript
复制
f(*[1,2] , *[3,4])
    f(*[1,2] , *[3,4])
               ^
SyntaxError: invalid syntax

编辑:关于信息,最初的问题是替换函数包装器中的一个参数。我想要替换输入的*args中的一个给定成员,并尝试执行以下操作:

代码语言:javascript
复制
def vectorize_pos(f,n=0):
    '''
    Decorator, vectorize the processing of the nth argument
    :param f: function that dont accept a list as nth argument
    '''
    def vectorizedFunction(*args,**kwargs):
        if isinstance(args[n],list):
            return map(lambda x : f( *(args[:n]) , x , *(args[n+1,:]), **kwargs),args[n])
        else:
            return f(*args,**kwargs)
    return vectorizedFunction

这就是问题的由来。我知道还有其他方法可以做同样的事情,但我只是想了解为什么解包一个序列有效,而不是更多。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2014-02-28 22:44:09

因为,根据Function call syntax,参数列表就是这样定义的

代码语言:javascript
复制
argument_list ::=  positional_arguments ["," keyword_arguments]
                     ["," "*" expression] ["," keyword_arguments]
                     ["," "**" expression]
                   | keyword_arguments ["," "*" expression]
                     ["," keyword_arguments] ["," "**" expression]
                   | "*" expression ["," keyword_arguments] ["," "**" expression]
                   | "**" expression

因此,每个函数调用只能传递一个* expression

票数 19
EN

Stack Overflow用户

发布于 2014-02-28 23:32:42

从Python3.5开始, in work

PEP 448是用Python3.5实现的。引用PEP的话说,它允许:

任意位置拆包operators:

print(*1,*2,3) 1 2 3 3}

(** {'x':1},

,**{'z':3}) {‘x’:1,'y':2,'z':>>>

票数 17
EN

Stack Overflow用户

发布于 2014-02-28 22:40:11

您可以连接列表:

代码语言:javascript
复制
>>> f(*[1,2]+[3,4])
1 2 3 4

或者使用itertools.chain

代码语言:javascript
复制
>>> from itertools import chain
>>> f(*chain([1,2], [3,4]))
1 2 3 4
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22098105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档