我正在查看Python手册并找到了斐波那契数字生成器的代码片段:
def fib(n): # write Fibonacci series up to n
a, b = 0, 1
while b < n:
print(b, end=' ')
a, b = b, a+b
print()
输出取决于n并返回有效的Fibonacci序列。
如果你改造它以单独使用变量“a”和“b”:
def fib(n): # write Fibonacci series up to n
a = 0
b = 1
while b < n:
print(b, end=' ')
a = b
b = a+b
print()
然后它会打印一个以2的幂为单位的数字序列(例如1,2,4,8,1等等)。
所以我想知道为什么会这样?两个变量使用之间的实际差异是什么?
答案 0 :(得分:9)
这样做的:
a, b = b, a+b
相当于:
temp = a
a = b
b += temp
它允许您同时进行两次计算而无需中间/临时变量。
不同之处在于,在您的第二段代码中,当您执行第二行b = a+b
时,您已经在上一行修改了a
不与第一段代码相同。
>>> a = 2
>>> b = 3
>>> a,b
2 3
>>> a,b = b,a
>>> a,b
3 2
另一方面,如果您使用问题中显示的第二种方法:
>>> a = 2
>>> b = 3
>>> a,b
2 3
>>> a = b
>>> b = a
>>> a,b
3 3
答案 1 :(得分:2)
在
a, b = b, a+b
首先评估右手表达式,并将结果分配给a
和b
。这类似于以下内容:
_new_a = b
_new_b = a+b
a = _new_a
b = _new_b
另一方面,在
a = b
b = a+b
您正在修改a
,然后再将其添加到b
。这相当于
a, b = b, b+b
解释了两个人的力量来自哪里。