gpt4 book ai didi

python-3.x - 如何理解python 3中的这种同时赋值评估?

转载 作者:行者123 更新时间:2023-12-02 18:47:27 25 4
gpt4 key购买 nike

最近开始学习python。我今天正在处理同步作业,发现我的代码产生的一些结果是我无法理解的。

x, y = 3, 5
x, y = y, (x+y)
print(y)

输出为8

我不明白为什么y = 8而不是y = 10尽管x = y = 5首先被评估。自 y = 8 ,这告诉我们x = 3y = x + y正在评估中?如果 x = y 这怎么可能?首先评估,因为它是从左到右评估的?

我首先调试了代码(产生了相同的结果),但我无法理解。我还尝试查看 python 文档,其中指出“分配给变量的集合中同时重叠发生从左到右,有时会导致困惑。”它提供的示例遵循我的逻辑:

x = [0, 1]
i = 0
i, x[i] = 1, 2
print(x)

它输出2

(从左到右计算)由于 i 更新为 1。然后,使用更新后的 i,因此 x[1] = 2不是x[0] = 2 .

我真的很感谢一些帮助。

最佳答案

I am not understanding why y = 8 instead of y = 10 despite x = y = 5 being evaluated first

首先评估作业的右侧。

在您的作业中,x = 3y = 5

x, y = y, (x+y)

首先将右侧计算为元组(5, 8),然后分配给左侧的值。因此 y 是8

您也可以将其视为

x, y = 3, 5
temp = y, x + y
x, y = temp

要查看内部到底发生了什么,您可以反汇编代码:

>>> import dis
>>> def f(x, y):
... x, y = y, x + y
...
>>> dis.dis(f)

输出

  2           0 LOAD_FAST                1 (y)
2 LOAD_FAST 0 (x)
4 LOAD_FAST 1 (y)
6 BINARY_ADD
8 ROT_TWO
10 STORE_FAST 0 (x)
12 STORE_FAST 1 (y)
14 LOAD_CONST 0 (None)
16 RETURN_VALUE

如您所见,加法是在赋值之前执行的。

关于python-3.x - 如何理解python 3中的这种同时赋值评估?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56505029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com