Python语法澄清
在浏览Python2.7文档时,我发现了这个片段Python语法澄清,python,Python,在浏览Python2.7文档时,我发现了这个片段 def fib(n): # write Fibonacci series up to n a, b = 0, 1 while b < n: print a, a, b = b, a+b def fib(n):#将Fibonacci级数写到n a、 b=0,1 而b
def fib(n): # write Fibonacci series up to n
a, b = 0, 1
while b < n:
print a,
a, b = b, a+b
def fib(n):#将Fibonacci级数写到n
a、 b=0,1
而b
但我不明白最后一行,也不确定我会如何用谷歌搜索它
我应该如何读取
a,b=b,a+b
,或者,它是什么意思?它是将a设置为b,将b设置为a+b,而不需要中间变量。这也可以通过以下方式实现:
temp = a
a = b
b = temp + b
Python首先计算赋值的右侧。它评估
b, a+b
从左到右。然后将值分别分配给变量a
和b
所以a,b=b,a+b
相当于
c = b
d = a+b
a = c
b = d
a, b = 2, 1+2
a, b = 2, 3
除了在没有显式临时变量的情况下实现结果。
请参阅Python上的文档
这里有一个微妙的点值得用一个例子来检验。假设a=1,b=2
a, b = b, a+b
相当于
c = b
d = a+b
a = c
b = d
a, b = 2, 1+2
a, b = 2, 3
因此a
被分配给2,b
被分配给3
请注意,这并不等同于
a = b
b = a + b
因为第一行将指定
a = 2
b = 2 + 2 = 4
请注意,这样做(错误)后,
b
最终等于4,而不是3。这就是为什么Python首先计算赋值的右侧(在进行任何赋值之前)很重要的原因。@njzk2在这种情况下不是这样的,但在某些情况下,使用这种赋值可能会是这样的。@njzk2:如果您先赋值a=b
,那么您就丢失了a
的原始值。因此a+b
通常是不正确的。因此,您需要一个临时变量c
。但是我同意不严格需要d
。@两者:都是这样,事实上,c(和d)在一般情况下是有用的。我假设顺序很重要,因此a,b=b,a+b
类似于a=b
b=a+b
?不。所有事情都是同时发生的。回答很好。你没有得到投票答案的唯一原因是,我觉得另一个答案上的评论和编辑提供了更多的信息,但你的答案肯定有帮助!:)