3zz*_*zzy 4 python fibonacci variable-assignment
a,b = 0,1
while b < 50:
print(b)
a = b
b = a+b
Run Code Online (Sandbox Code Playgroud)
输出:
1
2
4
8
16
32
Run Code Online (Sandbox Code Playgroud)
wheras:
a,b = 0,1
while b < 50:
print(b)
a,b = b, a+b
Run Code Online (Sandbox Code Playgroud)
输出(正确的斐波那契序列):
1
1
2
3
5
8
13
21
34
Run Code Online (Sandbox Code Playgroud)
他们不一样吗?我的意思a,b = b, a+b是基本上a = b和b = a+b单独写的一样- 不是吗?
ype*_*eᵀᴹ 11
不,他们不一样.
写作时a,b = b, a+b,分配是"同时"完成的.a,b = b, a+b和...一样(a, b) = (b, a+b).所以,之后
a, b = 5, 8
Run Code Online (Sandbox Code Playgroud)
a = 5,b = 8.当Python看到这个
(a, b) = (b, a+b)
Run Code Online (Sandbox Code Playgroud)
它首先计算右侧 (b, a+b)是(8,13) ,然后分配(该元组)向左侧,向(a,b).
当你有: a = b然后b = a+b,这两个操作一个接一个地完成.但对于他们每个人:
a = b
Run Code Online (Sandbox Code Playgroud)
它首先计算右侧 b ,然后分配(此值)至左侧,以a.然后再次
b = a + b
Run Code Online (Sandbox Code Playgroud)
它首先计算右侧 a + b ,然后分配(此值)至左侧,以b.
他们不一样.在第一个示例中,a分配了值,b然后将其新值添加到b.有效地b + b.
在第二个例子中,a被分配了当前值,b并被b赋予当前值a加上当前值b.它发生在a变化的价值之前.
这两个任务同时发生而不是顺序发生.
这些陈述是不同的.
a = b
b = a+b
Run Code Online (Sandbox Code Playgroud)
修改a,然后使用修改后的值进行更改b.实际上,它总是如此b = b + b.
a,b = b, a+b
Run Code Online (Sandbox Code Playgroud)
变化b并a在同一时刻,因此b使用原始a值计算.