Python:Python中的Splat / unpack运算符*不能在表达式中使用吗?

发布于 2021-01-29 18:19:54

有人知道为什么*不能在涉及迭代器/列表/元组的表达式中使用一元()运算符的原因吗?

为什么只限于功能解压缩?还是我认为这是错误的?

例如:

>>> [1,2,3, *[4,5,6]]
File "<stdin>", line 1
[1,2,3, *[4,5,6]]
        ^
SyntaxError: invalid syntax

*操作员为何不:

[1, 2, 3, *[4, 5, 6]] give [1, 2, 3, 4, 5, 6]

而当*运算符与函数调用一起使用时,它的确会扩展:

f(*[4, 5, 6]) is equivalent to f(4, 5, 6)

使用列表时,+和之间存在相似之处,而*使用其他类型扩展列表时则没有相似之处。

例如:

# This works
gen = (x for x in range(10))

def hello(*args):
    print args    
hello(*gen)

# but this does not work
[] + gen
TypeError: can only concatenate list (not "generator") to list
关注者
0
被浏览
50
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    3.5PEP 448中 所述,已在Python中添加了对列表,字典,集合和元组文字进行解包的功能:

    Python 3.5.0 (v3.5.0:374f501f4567, Sep 13 2015, 02:27:37) on Windows (64 bits).
    
    >>> [1, 2, 3, *[4, 5, 6]]
    [1, 2, 3, 4, 5, 6]
    

    以下是此更改背后原因的一些解释。请注意,这并不*[1, 2, 3]等同1, 2, 3于所有情况。Python的语法不适合这种方式。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看