我为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]
答案 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
根据需要生成正确的输出。