5

我很想在作业的右侧使用元组解包:

>>> a = [3,4]

>>> b = [1,2,*a]
  File "<stdin>", line 1
SyntaxError: can use starred expression only as assignment target

当然,我可以这样做:

>>> b = [1,2]
>>> b.extend(a)
>>> b
[1, 2, 3, 4]

但我认为这很麻烦。我错过了一点吗?一个简单的方法?有这个计划吗?或者是否有理由明确没有在语言中使用它?

部分问题在于所有容器类型都使用构造函数,该构造函数期望可迭代并且不接受 *args 参数。我可以子类化,但这会给其他人应该阅读的脚本引入一些非 Python 的噪音。

4

4 回答 4

9

您可以使用添加运算符:

a = [3, 4]
b = [1, 2] + a
于 2012-09-19T11:01:09.077 回答
7

您有几个选择,但最好的选择是使用列表连接 ( +):

b = [1,2] + a

如果您真的希望能够使用该*语法,您可以创建自己的列表包装器:

def my_list(*args):
    return list(args)

那么您可以将其称为:

a = 3,4
b = my_list(1,2,*a)

我想这里的好处是a不需要是列表,它可以是任何序列类型。

于 2012-09-19T11:00:59.847 回答
4

不,这不是计划的。*arg任意参数列表(和关键字**kw参数映射)仅适用于 python调用调用(由*arg**kw函数签名镜像),以及可迭代赋值的左侧。

您可以简单地连接两个列表:

b = [10, 2] + a
于 2012-09-19T11:01:09.847 回答
3

这在 Python 3.5 中已修复,如PEP 448中所述:

>>> a=[3,4]
>>> b=[1,2,*a]
>>> b
[1, 2, 3, 4]
于 2018-02-23T05:54:53.477 回答