【发布时间】:2018-04-20 12:09:58
【问题描述】:
我刚刚编写了这些代码,但输出不同。第二个代码的输出与我预期的一样正确,但第一个代码的输出不正确。但为什么呢?
def fib(n):
x = 0
y = 1
print x
for i in range(n):
x = y
y = x+y
print x
return x
输出是;当 n = 5
0
1
2
4
8
16
def fib(n):
x,y = 0,1
print x
for i in range(n):
x,y = y,x+y
print x
return x
输出是;当 n = 5
0
1
1
2
3
5
第二个代码是正确的,但是,
x,y = y,x+y 和
x = y , y = x+y
它们看起来一样,但输出不同,为什么?
【问题讨论】:
-
在后一种情况下,
y不会在右侧更新,x和y将根据 old 值分配y。使用y的旧值构造元组(y,x+y),然后将这个元组解包为左侧的x和y的新值。在第一种情况下,x会在您尝试计算y时更新,因此您会得到错误的结果。 -
您需要一个用于旧值
x的临时变量,就像在大多数语言中一样。在python中我会使用第二个,它更优雅、更干净:)
标签: python variable-assignment fibonacci