在python中,在单行中分配变量和在多行中分配变量有什么区别
我已经为斐波那契数列编写了一个脚本,其中包括单行变量赋值和多行变量赋值。我得到了两个不同的结果 多行:在python中,在单行中分配变量和在多行中分配变量有什么区别,python,Python,我已经为斐波那契数列编写了一个脚本,其中包括单行变量赋值和多行变量赋值。我得到了两个不同的结果 多行: class fibonacci: def fib(self,num): result = [] a = 0 b = 1 while a < num: result.append(a) a = b b = a + b return result instanc
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
订单更改:
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
单线:
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
唯一的区别是评估的顺序。当你分配
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
这将根据需要生成正确的输出。
类fibonacci:def fib(self,num):result=[]a,b=0,1而a
,但我仍然得到了相同的输出:[0,1,2,4,8,16,32,64]我已经更改了顺序,但仍然得到了两个不同的输出,但为什么还要使用一个变量呢?您不必这样做。您的第二个示例是正确的。但是,为了清楚起见(以及您的理解),我的解决方案可能更简单。
foo = a + b
bar = a
b = foo
a = bar
a = b
b = a + b
c = a
a = b
b = a + c