这段代码:
a = [1, 2, 3]
print(*a, a.pop(0))
Python 3.8 在拆包前打印 2 3 1
(在执行pop
之前)。
Python 3.9 在拆包后打印 1 2 3 1
(在执行pop
之后)。
导致这种变化的原因是什么?我在更改日志中没有找到相关的信息。
编辑:不仅在函数调用中,例如在列表显示中也适用:
a = [1, 2, 3]
b = [*a, a.pop(0)]
print(b)
打印[2, 3, 1]与 [1, 2, 3, 1]。并且 Expression lists 中说:“从左到右评估表达式”(这是Python 3.8文档的链接),因此我希望拆包表达式先发生。
set
元素的顺序,文档中称为"CPython实现细节"的大部分内容,或者在搜索"undefined"时发现的一些内容都属于此类。 - Kelly Bundy