在python中,在单行中分配变量和在多行中分配变量之间有什么区别

时间:2015-10-18 10:25:51

标签: python

我为Fibonacci系列编写了一个脚本,包括单行变量赋值和多行变量赋值。我得到了两个不同的结果

多行:

class fibonacci:
    def fib(self,num):
      result = []
      a = 0
      b = 1
      while a < num:
          result.append(a)
          a = b
          b =  a + b
      return result

instance = fibonacci()
new_inst = instance.fib(100)
print new_inst

输出:

[0, 1, 2, 4, 8, 16, 32, 64]

订单已更改:

class fibonacci:
    def fib(self,num):
      result = []
      b = 1
      a = 0
      while a < num:
          result.append(a)
          b = a + b
          a = b
      return result

instance = fibonacci()
new_inst = instance.fib(100)
print new_inst

输出:

[0, 1, 2, 4, 8, 16, 32, 64]

单行:

class fibonacci:
    def fib(self,num):
      result = []
      a,b = 0,1
      while a < num:
          result.append(a)
          a,b = b, a + b
      return result

instance = fibonacci()
new_inst = instance.fib(100)
print new_inst

输出:

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

1 个答案:

答案 0 :(得分:3)

唯一的区别是评估顺序。分配

a, b = b, a + b

右手表达式在分配到左侧之前已完全评估,因此评估顺序为:

foo = a + b
bar = a
b = foo
a = bar

这与第一个示例中的评估顺序不同,即:

 a = b
 b =  a + b

因此,您的两个示例会产生不同的结果。

要解决您的问题,我可能会使用:

c = a
a = b
b = a + c

根据需要生成正确的输出。