jim*_*3po 3 python iterator variable-assignment
我想知道第8行的内容是什么.
# Iterators
class Fibs:
def __init__(self):
self.a = 0
self.b = 1
def next(self):
self.a, self.b = self.b, self.a+self.b # <--- here
return self.a
def __iter__(self):
return self
fibs = Fibs()
for f in fibs:
if f > 1000:
print f
break
Run Code Online (Sandbox Code Playgroud)
程序的其余部分我真的不需要太多解释.我不确定是什么分配给了什么.
这是一个大致相当于此的多重赋值:
tmp = self.a
self.a = self.b
self.b = tmp + self.b
Run Code Online (Sandbox Code Playgroud)
或者这个伪代码:
a' = b b' = a + b
正如您所看到的,多重分配比单独分配更简洁,更类似于伪代码示例.
几乎这个例子在Python文档中给出,作为计算Fibonacci数的一个例子.多重赋值的一个优点是在任何赋值发生之前评估右侧的变量,在这种情况下节省了对临时变量的需求.
这是一对配对,简写
t = self.a
self.a = self.b
self.b = t+self.b
Run Code Online (Sandbox Code Playgroud)
只是使用一个班轮而不是两个赋值..准确地说我认为赋值的左操作数被认为是两个元素的元组,让你像分配给元组(self.a, self,b)的值(self.b, self.a+self.b),其做同样的事情作为三在不需要临时变量的情况下编写的单独分配.这是因为,在不使用元组的情况下,分配按顺序执行,在您的示例中,它们同时被解析,保留self.a第二个赋值中的值.
如文件中所述:
如下递归地定义对象到目标列表的分配.
| 归档时间: |
|
| 查看次数: |
197 次 |
| 最近记录: |