【发布时间】:2016-01-13 12:24:51
【问题描述】:
有人知道为什么不能在涉及迭代器/列表/元组的表达式中使用一元 (*) 运算符的原因吗?
为什么只限于函数解包?还是我想错了?
例如:
>>> [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__的行为
标签: python python-2.7 iterable-unpacking argument-unpacking pep448