以下代码在 Python 中运行得非常好:
def f(x,y,z): return [x,y,z]
a=[1,2]
f(3,*a)
的要素a
像你这样称呼它一样打开包装f(3,1,2)
它返回[3,1,2]
。精彩的!
但我无法解开其中的元素a
进入first两个论点:
f(*a,3)
而不是这样称呼f(1,2,3)
,我得到“语法错误:只有命名参数可以跟随*表达式”。
我只是想知道为什么它必须是这样,以及是否有任何我可能不知道的聪明技巧可以将数组解包到参数列表的任意部分而不诉诸临时变量。
As Raymond Hettinger's answer points out, this may change has changed in Python 3 and here is a related proposal http://www.python.org/dev/peps/pep-3132/, which has been accepted.
Especially related to the current question, here's one of the possible changes to that proposal that was discussed:
只允许带星号的表达式作为表达式列表中的最后一项。这将简化
稍微解压代码并允许为带星号的表达式分配一个迭代器。这
行为被拒绝,因为这太令人惊讶了。
因此,对解包函数参数的限制是有实现原因的,但这确实有点令人惊讶!
与此同时,这是我一直在寻找的解决方法,回想起来很明显:
f(*(a+[3]))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)