我正在测试一个python脚本,我必须不断存储2个变量的旧值,然后通过函数返回它们。为此,我以斐波纳契系列为例:
def fibonacci(n):
a=0;b=1;cnt=0;
while True:
if (cnt > n):
return;
yield a;
c=b;b=a+b;a=c;
cnt +=1;
fib=fibonacci(5)
for x in fib:
print(x,end=" ")
一切都按照预期完美运行,输出也如预期。然而,我尝试以不同的方式编写它,而不是使用额外的变量" c",我仍然可以有效地交换旧值,我几乎碰到了这一点(虽然不知道如何作业在这里工作):
而不是行:
c=b;b=a+b;a=c;
用于:
a,b=b,a+b
所以详细说明将不胜感激。
答案 0 :(得分:2)
这是Python的一个功能。
>> a=1
>> b=2
>> a, b = b, a
>> a, b
>> (2, 1)
赋值的右侧是一个创建新元组的表达式。赋值的另一方立即将(未引用的)元组解包为名称a和b。
在赋值之后,新元组未被引用并标记为垃圾收集,并且已经交换了绑定到a和b的值。
检查一下 tuple and sequences
希望这有帮助。