a,b = 0,1
while b < 50:
print(b)
a = b
b = a+b
输出:
1
2
4
8
16
32
wheras:
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
分开编写 - 不是吗?
答案 0 :(得分: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)
,然后将此元组分配给左侧,添加到{{ 1}}。
当你有:(a,b)
然后a = b
时,这两个操作将一个接一个地完成。但对于他们每个人:
b = a+b
首先计算右侧 a = b
然后将(此值)分配给左侧,分配给b
。再次
a
首先计算右侧 b = a + b
,然后将此值(此值)分配给左侧,添加到a + b
。
答案 1 :(得分:5)
他们不一样。在第一个示例中,为a
分配了值b
,然后将其新值添加到b
。有效b + b
。
在第二个示例中,为a分配了当前值b
,并为b
分配了当前值a
加上当前值b
。它发生在a
的值发生变化之前。
这两项任务同时发生而不是顺序发生。
答案 2 :(得分:5)
这些陈述不同。
a = b
b = a+b
修改a
,然后使用修改后的值更改b
。实际上,它总是b = b + b
。
a,b = b, a+b
同一时间更改b
和a
,因此使用原始b
值计算a
。
答案 3 :(得分:3)
为此:
a,b = b, a+b
首先评估右侧的所有内容,然后将其分配到左侧。因此,在左侧的分配更改之前,您在右侧使用a
的值。
为此:
a = b
b = a+b
在执行第二个语句之前更改a
的值。所以你的结果是不同的。
答案 4 :(得分:1)
第二个示例表示用于执行“同时”分配的元组。
(A,B)=(B,A+B)
元组是不可变的,这意味着它们的内容一旦设置就无法更改。此外,Python从右到左处理分配。因此,当创建右边的元组时,即使A&amp; A值,也不会改变值。 B在左侧分配了新值。
答案 5 :(得分:0)
两个分配操作如何在同一时间完成:
a,b = b,a+b
:首先在后台,我认为python会将a+b
分配给变量,让我们称之为x
并将b
分配给变量让我们称之为y
1}}然后,将x
分配给b
,将y
分配给a
。
我认为“同时”的概念不是逻辑真实的,内存中a
的值必须首先改变,然后b
,反之亦然,因此{{1}的值除非有另一个变量来保存上面的新值,否则仍依赖a
或反之亦然。