这是they所拥有的:
def fib(n):
a, b = 0, 1
while a < n:
print a,
a, b = b, a+b
这就是我所拥有的:
def fib(n):
a = 0
b = 1
while a < n:
print a
a = b
b = b+a
第一个在使用时返回正确的序列,而我的收益为0,1,2,4,8,16,32 ...
我目前正在学习编程(没有先前的计算机科学教育),很明显问题是我如何定义我的变量。用逗号分隔变量和用新行分隔变量之间有什么区别(假设这是问题)?
答案 0 :(得分:8)
这是一个元组任务:
a, b = 0, 1
您也可以将其视为
(a, b) = (0, 1)
使用值0
和1
创建临时元组,然后将其解压缩到变量a
和b
这也是一个元组赋值
a, b = b, a+b
同样,您可以将其视为
(a, b) = (b, a+b)
临时元组是根据b
和a+b
的值创建的,然后才会更新其中任何一个。在创建临时元组之后,分配才会发生。
通过将其分解为单独的步骤,您正在更改代码的含义。
让我们看看这里发生了什么
a, b = 0, 1 # a=0 , b=1
a, b = b, a+b # a=1 , b=1
与
比较a = 0 # a=0
b = 1 # a=0 , b=1
a = b # a=1 , b=1
b = b+a # a=1 , b=2
答案 1 :(得分:5)
只有一个区别:
在第一个中,作业b = b+a
在修改a
之前完成。这是因为,在完成任何赋值之前,首先评估RHS中的表达式。
而在第二个中,第二个分配是在a
修改后完成的。这就是你看到错误结果的原因。
所以,在你的代码中:
b = b + a
实际上是:
b = b + b
因为已为a
分配了值b
。