Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python语法澄清_Python - Fatal编程技术网

Python语法澄清

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

在浏览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
但我不明白最后一行,也不确定我会如何用谷歌搜索它


我应该如何读取
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
?不。所有事情都是同时发生的。回答很好。你没有得到投票答案的唯一原因是,我觉得另一个答案上的评论和编辑提供了更多的信息,但你的答案肯定有帮助!:)