我想了解第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
我的问题如下:
为什么数字会垂直显示而不是像print语句那样水平显示?我知道你可以强制数字水平显示但想要理解为什么这不是默认值。
最重要的是,python逻辑是如何工作的?我理解它的斐波那契序列,但你只是要求代码打印&#34; b&#34;。它应该反复打印一个+ b,如果不是(导致1反复打印)?我不明白python中的逻辑是如何推进序列的。
非常感谢任何帮助。谢谢。
答案 0 :(得分:3)
默认情况下,python print语句会在每次打印后生成换行符。 这会导致每个打印的项目出现在自己的行上。如果您打印文字换行符,则会得到两个空行:
>>> print "\n"
>>>
最重要的是,python逻辑是如何工作的?我理解它 斐波那契序列,但你只是要求代码打印&#34; b&#34;。 如果没有,它应该反复打印一个+ b(结果 在1中被反复打印)?
这一行:
a, b = b, a+b
评估表达式b
和a+b
。如果b = 1且a = 0,那么这将导致元组(1, 1)
。然后将该元组拆分为其两个组件,并分别分配给变量a
和b
。所以在第一次迭代结束时,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;。