Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.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 理解困难3.2。编程的第一步_Python - Fatal编程技术网

Python 理解困难3.2。编程的第一步

Python 理解困难3.2。编程的第一步,python,Python,我最近开始阅读一本新指南,并选择了[python.org教程](。然而,在中,我无法理解这段代码是如何: a, b = 0, 1 while b < 10: print b a, b = b, a+b 该指南提到: 第一行包含一个多赋值:变量a和b同时获得新的值0和1。在最后一行,再次使用该值,表明在任何赋值发生之前,首先计算右侧的表达式。计算右侧表达式从左到右 有人能为我简化一下吗?第一行可以像这样展开: a = 0 b = 1 不幸的是,最后一行不是很容易,因为

我最近开始阅读一本新指南,并选择了[python.org教程](。然而,在中,我无法理解这段代码是如何:

a, b = 0, 1
while b < 10:
    print b
    a, b = b, a+b
该指南提到:

  • 第一行包含一个多赋值:变量
    a
    b
    同时获得新的值0和1。在最后一行,再次使用该值,表明在任何赋值发生之前,首先计算右侧的表达式。计算右侧表达式从左到右

有人能为我简化一下吗?

第一行可以像这样展开:

a = 0
b = 1
不幸的是,最后一行不是很容易,因为这些值是同时“解包”的。在这种情况下,如果要按顺序写入,则需要一个临时变量:

old_a = a
a = b
b = old_a + b

第一行可以按如下方式展开:

a = 0
b = 1
不幸的是,最后一行不是很容易,因为这些值是同时“解包”的。在这种情况下,如果要按顺序写入,则需要一个临时变量:

old_a = a
a = b
b = old_a + b
演示在任何赋值之前,都首先计算右侧的表达式

表示它首先实现第二个表达式(
a+b
),然后将
a
与未修改的
b
相等,将
b
a+b
相等

看起来可能是这样

step1 => a + b
step2 => a = b
         b = step1


            step2       step1     b
loop    |            |        |  
        |            |        | 
        |  a     b   |   mod  |  output
1       |  0     1   |    -   |   >> 1
2       |  1     1   |   0+1  |   >> 1
3       |  1     2   |   1+1  |   >> 2      
4       |  2     3   |   1+2  |   >> 3
5       |  3     5   |   2+3  |   >> 5
6       |  5     8   |   3+5  |   >> 8
演示在任何赋值之前,都首先计算右侧的表达式

表示它首先实现第二个表达式(
a+b
),然后将
a
与未修改的
b
相等,将
b
a+b
相等

看起来可能是这样

step1 => a + b
step2 => a = b
         b = step1


            step2       step1     b
loop    |            |        |  
        |            |        | 
        |  a     b   |   mod  |  output
1       |  0     1   |    -   |   >> 1
2       |  1     1   |   0+1  |   >> 1
3       |  1     2   |   1+1  |   >> 2      
4       |  2     3   |   1+2  |   >> 3
5       |  3     5   |   2+3  |   >> 5
6       |  5     8   |   3+5  |   >> 8

我觉得已经很清楚了(你不懂的话可以用谷歌搜索),但Martijn可能有一些有用的说法,右手边产生两个值:
b
a+b
。这些值首先计算出来。然后这两个值被分配给左边的名称。@TimCastelijns:mgilson已经涵盖了它。相关的我认为它已经非常清楚了(你不懂的单词可以用谷歌搜索),但Martijn可能有一些有用的话要说,右侧产生两个值:
b
a+b
。首先计算它们。然后将这两个值分配给左侧的名称。@TimCastelijns:mgilson涵盖了这两个值。相关的,我想我理解。但是为什么代码需要按打印b a,b的形式来构造呢=b,b+a?代码的哪一部分指示该过程应该重复?@Reginsmal--
循环是指示该操作重复的部分。因此[a,b=b,a+b]当只打印b时,是否需要重复该过程?值old_a将始终等于0?我想我理解。但是为什么代码需要结构为打印b a,b=b,b+a?代码的哪一部分指示该过程应该重复?@Reginsmal--
while
循环是指示说明操作会重复。那么[a,b=b,a+b]是只打印b时需要重复的过程吗?而且旧值a始终等于0?