2021年6月10日 / 47次阅读 / Last Modified 2021年6月10日
Python提供的for语句,清晰简洁方便,在python代码中很通用,所有内置的container对象,都可以用for语句来遍历。本文简述for语句背后的机制:iterator protocol
for... in...,首先用iter函数,基于container对象创建一个iterator(迭代器),然后通过next函数调用此迭代器,直到迭代器抛出StopIteration,for循环停止。
iter和next函数,都是python内置函数。迭代器对象有__next__魔法函数,因此可以用next来调用。
了解了for循环的机制,我们就可以自己写一个可以被for循环遍历的某种container对象。
class Reverse:
"""Iterator for looping over a sequence backwards."""
def __init__(self, data):
self.data = data
self.index = len(data)
def __iter__(self):
return self
def __next__(self):
if self.index == 0:
raise StopIteration
self.index = self.index - 1
return self.data[self.index]
iter函数调用__iter__,next调用__next__,这样以上这个类定义的对象,就可以用for来遍历。
>>> rev = Reverse('spam')
>>> for char in rev:
... print(char)
...
m
a
p
s
用这种方式写“可迭代对象”,与生成器效果是一样的。生成器是可迭代的函数,这里是对象。生成器更智能,它会自动记录代码的执行状态,并且自动抛出StopIteration异常!
-- EOF --
本文链接:https://www.pynote.net/archives/3716
前一篇:HEVC中的Z-Scan
后一篇:HEVC中的QG和delta QP
©Copyright 麦新杰 Since 2019 Python笔记