Python 变量赋值问题

5 投票
6 回答
1450 浏览
提问于 2025-04-16 20:19
a,b = 0,1 
while b < 50:
    print(b)
    a = b
    b = a+b

输出结果:

1
2
4
8
16
32

而且:

a,b = 0,1 
while b < 50:
    print(b)
    a,b = b, a+b

输出结果(正确的斐波那契数列):

1
1
2
3
5
8
13
21
34

它们不是一样的吗?我的意思是 a,b = b, a+b 本质上和 a = b 以及 b = a+b 分开写是一样的——对吧?

6 个回答

5

这两句话的意思是不一样的。

a = b
b = a+b

这个会先修改 a 的值,然后用修改后的值去改变 b。实际上,它总是执行 b = b + b

a,b = b, a+b

这个则是同时改变 ba,所以 b 的计算是基于原始的 a 值。

5

它们不是一样的。在第一个例子中,a 被赋值为 b 的值,然后这个新值又加到 b 上。实际上就是 b + b

在第二个例子中,a 被赋值为当前的 b 的值,而 b 被赋值为当前的 a 加上当前的 b。这个过程发生在 a 的值改变之前。

这两个赋值是同时发生的,而不是一个接一个地进行。

11

不,它们并不相同。

当你写 a,b = b, a+b 时,这里的赋值是“同时”进行的。a,b = b, a+b(a, b) = (b, a+b) 是一样的。所以,在

a, b = 5, 8

a=5 和 b=8 的情况下,当Python看到这个

(a, b) = (b, a+b)

首先计算右边的部分 (b, a+b),结果是 (8,13),然后将这个结果赋值给左边的部分,也就是 (a,b)


当你有: a = b 然后 b = a+b 时,这两个操作是一个接一个进行的。但对于每一个操作:

a = b

首先计算右边的部分 b,然后将这个值赋值给左边的部分,也就是 a。接着

b = a + b

首先计算右边的部分 a + b,然后将这个值赋值给左边的部分,也就是 b

撰写回答