基本上我的标题是问题:
示例:
>>> l=[1,2,3]
>>> *l
SyntaxError: can't use starred expression here
>>> print(*l)
1 2 3
>>>
那是为什么?
答案 0 :(得分:2)
因为它等效于对应于列表的位置修饰,所以当您不将其命名为可以接受所有参数的地方时,这毫无意义,因为没有地方可以放置参数
f.x。
print(*[1,2,3])
# is the same as
print(1,2,3)
和
*[1,2,3]
#is the same as - and do not think of it as a tuple
1,2,3 # here how ever that makes it a tuple since tuples not defined by the parenthasies, but the point is the same
但是在python 3.5的元组,列表,集合和字典中有一点例外,但这是一个例外,并且还可以用于分配剩余的值,无论python如何看到您的非这些。
编辑 我取消删除答案,因为我意识到只有最后一部分是错误的。
答案 1 :(得分:1)
我认为这实际上是关于了解*l
或一般而言*ListLikeObject
的问题。
关键点是*ListLikeObject
并不是一个有效的表达式。这并不意味着“哦,请解开清单”。
一个示例可以是2 *[1, 2, 3]
(众所周知,它将输出[1, 2, 3, 1, 2, 3]
)。如果一个单独的*[1, 2, 3]
有效,应该输出什么?
2 1 2 3
并且无效(以某种方式除以0),是否应该引发运行时异常?
因此,基本上,*[1, 2, 3]
只是一个语法糖,可以帮助您传递参数。您无需手动解压缩列表,但解释器将为您完成。但是本质上,它仍在传递三个参数,而不是其他一个元组。