cfi*_*cfi 5 python python-3.x python-3.2 iterable-unpacking
我喜欢在作业的右侧使用元组拆包:
>>> a = [3,4]
>>> b = [1,2,*a]
File "<stdin>", line 1
SyntaxError: can use starred expression only as assignment target
Run Code Online (Sandbox Code Playgroud)
当然,我可以这样做:
>>> b = [1,2]
>>> b.extend(a)
>>> b
[1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
但我认为这很麻烦.我有点意思吗?一个简单的方法?它有计划吗?或者是否有理由明确没有使用该语言?
部分问题是所有容器类型都使用构造函数,该构造函数期望迭代,并且不接受*args参数.我可以继承,但是这会给其他人应该阅读的脚本引入一些非pythonic噪声.
您有几个选项,但最好的选择是使用list concatenation(+):
b = [1,2] + a
Run Code Online (Sandbox Code Playgroud)
如果您真的希望能够使用*语法,可以创建自己的列表包装器:
def my_list(*args):
return list(args)
Run Code Online (Sandbox Code Playgroud)
然后你可以称之为:
a = 3,4
b = my_list(1,2,*a)
Run Code Online (Sandbox Code Playgroud)
我想这里的好处是a不需要是一个列表,它可以是任何序列类型.
这在 Python 3.5 中已修复,如PEP 448中所述:
>>> a=[3,4]
>>> b=[1,2,*a]
>>> b
[1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)