我正在学习python,我有一些问题:
之间有什么区别
a,b = 0,1
for x in range(100):
print(a)
a=b
b=a+b
和
a,b = 0,1
for x in range(100):
print(a)
a,b = b, a+b
第一个给出了不好的结果,但为什么?
答案 0 :(得分:1)
由于您首先设置a = b
,因此新b
的值将是旧版b
的两倍。您提前覆盖a
。正确的实现应该使用临时变量t
:
a,b = 0,1
for x in range(100):
print(a)
t=a
a=b
b=t+b
这基本上就是通过使用序列分配来完成的。
在原始代码中,您有:
a,b = 0,1
for x in range(100):
print(a)
a=b # a now is the old b
b=a+b # b is now twice the old a so b'=2*b instead of b'=a+b
因此,这会导致每次乘以两次跳跃(在1
首次加载到a
第一步之后)。
一个等价的问题是变量的交换。如果您希望a
获取b
的值,反之亦然,那么不能写:
#wrong swap
a = b
b = a
因为在第一次分配后您丢失了a
的值。您可以使用临时t
:
t = a
a = b
b = t
或在Python中使用序列分配:
a,b = b,a
首先创建元组t = (b,a)
,然后将其分配给a,b
。