Python 2.7 Python-Fibonacci序列与序列解包
我正在迭代处理斐波那契序列。我期望以下两个函数提供相同的结果,但它们没有 示例1根据需要返回斐波那契序列:Python 2.7 Python-Fibonacci序列与序列解包,python-2.7,Python 2.7,我正在迭代处理斐波那契序列。我期望以下两个函数提供相同的结果,但它们没有 示例1根据需要返回斐波那契序列: def run(): for x in range(0,20): fib(x) def fib(n): a, b = 0, 1 for i in range(n): a, b = b, a + b print a run() 示例1结果: 0 1 1 2 3 5 8 13 21 34 例2无顺序拆包: def
def run():
for x in range(0,20):
fib(x)
def fib(n):
a, b = 0, 1
for i in range(n):
a, b = b, a + b
print a
run()
示例1结果:
0
1
1
2
3
5
8
13
21
34
例2无顺序拆包:
def run():
for x in range(0,20):
fib(x)
def fib(n):
a = 0
b = 1
for i in range(n):
a = b
b = a + b
print a
run()
示例2结果:
0
1
2
4
8
16
32
64
128
256
具体来说,为什么
a, b = b, a + b
不同于
a = b
b = a + b
a、 b=b,a+b首先计算=的右侧,然后将其分配给左侧。即,a和b中的结果将基于该行之前的先前值的计算。当第二行代码执行顺序写入的操作时,第二行使用第一行中获得的值进行求值。第一行返回右侧值a+b的求值结果,并将其用于赋值。也就是说,计算a+b,然后分配a=b和b=result 而第二个值在可以用于等式之前会覆盖a中的值 也就是说,通过以下循环:
a=b
b=a+b
结果是:
a = 0, b = (0 + 1), print a: 0
a = 1, b = (1 + 1), print a: 1
a = 2, b = (2 + 2), print a: 2
a = 4, b = (4 + 4), print a: 4
您需要的是一个临时返回值,因为在对语句a+b求值之前,您不想更新a或b的值
def fib(n):
a = 0
b = 1
for i in range(n):
temp = a + b
a, b = b, temp
print a
非常感谢。为了澄清,a,b=b,a+b的多行解决方案可能是什么样的?例如,您可以引入一个临时变量来存储以前的a结果:c=a a=b=c+b