理解基本的Python逻辑和操作流程(a,b = b,a + b)

时间:2017-06-03 21:34:15

标签: python

我想了解第3.2节

中Python.org教程中提供的代码
class C(A):
    def foo(self):
        print 'C'
        super(C, self).foo()

    def __getattribute__(self, item):
        try:
            x = super(C, self).__getattribute__(item)
        except AttributeError:
            print 'Attribute Error'
        else:
            return x

以上代码的顺序如下:

a, b = 0, 1
>>> while b < 10:
...     print(b)
...     a, b = b, a+b

我的问题如下:

  1. 为什么数字会垂直显示而不是像print语句那样水平显示?我知道你可以强制数字水平显示但想要理解为什么这不是默认值。

  2. 最重要的是,python逻辑是如何工作的?我理解它的斐波那契序列,但你只是要求代码打印&#34; b&#34;。它应该反复打印一个+ b,如果不是(导致1反复打印)?我不明白python中的逻辑是如何推进序列的。

  3. 非常感谢任何帮助。谢谢。

2 个答案:

答案 0 :(得分:3)

默认情况下,python print语句会在每次打印后生成换行符。 这会导致每个打印的项目出现在自己的行上。如果您打印文字换行符,则会得到两个空行:

>>> print "\n"


>>> 
  

最重要的是,python逻辑是如何工作的?我理解它   斐波那契序列,但你只是要求代码打印&#34; b&#34;。   如果没有,它应该反复打印一个+ b(结果   在1中被反复打印)?

这一行:

a, b = b, a+b

评估表达式ba+b。如果b = 1且a = 0,那么这将导致元组(1, 1)。然后将该元组拆分为其两个组件,并分别分配给变量ab。所以在第一次迭代结束时,a和b各得到值1.这最终等同于连续的操作

tmp = b
b = a + b
a = tmp

但请注意,我们必须创建一个临时变量来保存b的原始值。这是因为单行在分配给左侧命名的变量之前,在其右侧评估两个表达式。

答案 1 :(得分:0)

首先,如果使用括号,您的代码将非常简单。代码a,b是一个图案: While b<10: #b=1 print(b) #output:1 (a,b) = (a,a+b) # a=1, b=1 让我们解释每行的代码行:

While b<10: #b=1
    print(b) #output:1
    (a,b) = (a,a+b) # a=1, b=2

现在进行下一次迭代:

While b<10: #b=1
    print(b) #output:2
    (a,b) = (a,a+b) # a=2, b=3

接下来:

{{1}}

依旧...... 你会得到 1 1 2 3 五 8 但是每个数字都在一个单独的行中,因为打印功能会添加&#39; \ n&#39;。所以输出是&#34;垂直&#34;。