Python中的动态变量赋值

时间:2017-01-04 07:19:27

标签: python shell python-3.x

我正在测试一个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

所以详细说明将不胜感激。

1 个答案:

答案 0 :(得分:2)

这是Python的一个功能。

>> a=1  
>> b=2  
>> a, b = b, a  
>> a, b   
>> (2, 1)

赋值的右侧是一个创建新元组的表达式。赋值的另一方立即将(未引用的)元组解包为名称a和b。

在赋值之后,新元组未被引用并标记为垃圾收集,并且已经交换了绑定到a和b的值。

检查一下 tuple and sequences

希望这有帮助。