有没有人知道为什么在涉及迭代器/列表/元组的表达式中不能使用一元 (*
) 运算符?
为什么它只限于函数展开?或者是我想错了吗?
例如:
>>> [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
list.__add__
的行为。 - Tamas Hegedus