问题描述
基本上我的头衔是问题:
例:
>>> l=[1,2,3]
>>> *l
SyntaxError: can't use starred expression here
>>> print(*l)
1 2 3
>>>
这是为什么???
1楼
因为它相当于与列表相关的位置控制,所以当你没有在某个地方调用它可以接受所有的参数时,这是没有意义的,因为没有地方可以放置参数
FX
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如何看到你不做这些。
编辑我删除了我的答案,因为我意识到只有最后一部分是错误的。
2楼
我认为这实际上是一个关于理解*l
或一般*ListLikeObject
。
关键点是*ListLikeObject
不是单独的有效表达式。
这并不意味着“哦,请打开列表”。
一个例子可以是2 *[1, 2, 3]
(众所周知,它将输出[1, 2, 3, 1, 2, 3]
)。
如果个人*[1, 2, 3]
有效,它应该输出什么?
它是否应该引发运行时异常,因为计算的表达式是2 1 2 3
并且它是无效的(某种程度上除以0)?
所以基本上, *[1, 2, 3]
只是一种语法糖,可以帮助你传递参数。
您无需手动解压缩列表,但解释器会为您执行此操作。
但基本上它仍然传递三个参数而不是一个其他元组的元组。