为什么python shell只允许`print`输出解压缩-python

时间:2018-09-16 00:41:47

标签: python python-3.x printing

基本上我的标题是问题:

示例:

>>> l=[1,2,3]
>>> *l
SyntaxError: can't use starred expression here
>>> print(*l)
1 2 3
>>> 

那是为什么?

2 个答案:

答案 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]只是一个语法糖,可以帮助您传递参数。您无需手动解压缩列表,但解释器将为您完成。但是本质上,它仍在传递三个参数,而不是其他一个元组。