一尘不染

Python中的多个分配和评估顺序

python

以下Python表达式之间有什么区别:

# First:

x,y = y,x+y

# Second:

x = y
y = x+y

第一给出的结果与第二给出的结果不同。

例如,

第一:

>>> x = 1
>>> y = 2
>>> x,y = y,x+y
>>> x
2
>>> y
3

第二:

>>> x = 1
>>> y = 2
>>> x = y
>>> y = x+y
>>> x
2
>>> y
4

y是第一的 3 和第二的 4


阅读 473

收藏
2020-02-13

共1个答案

一尘不染

在赋值语句中,总是在对变量进行实际设置之前先对右侧进行全面评估。所以,

x, y = y, x + y

评估板y(我们称之为的结果ham),评估x + y(呼叫spam),然后设置xham和y到spam。也就是说,就像

ham = y
spam = x + y
x = ham
y = spam

相比之下,

x = y
y = x + y

设置x为y,然后设置y为x(which == y)plus y,因此等效于

x = y
y = y + y
2020-02-13