gpt4 book ai didi

python - __iter__ (迭代器和生成器)

转载 作者:行者123 更新时间:2023-11-30 22:57:44 24 4
gpt4 key购买 nike

我读了一本有关 Python 高级主题的书。作者试图解释生成器。

这是他要解释的例子:

class rev:
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]

def main():
reve = rev('zix')
for i in reve:
print(i)

if __name__=='__main__':
main()

这段代码的主要思想是反转生成器。输出是:

x
i
z

我发现很难理解的是这部分:

def __iter__(self):
return self

谁能给我解释一下吗?

最佳答案

当你执行for x in xs时,xs必须是一个可迭代,这意味着你可以获得一个迭代器 通过 iter(xs) 来摆脱它,您可以在实现 xs.__iter__() 时执行此操作。需要一个迭代器来实现__next__(),这样in操作符就可以通过调用next()来逐一使用它。

现在,就你的情况

reve = rev("hello") # is an iterable, as there is rev.__iter__()
rev1 = iter(reve) # is an iterator, this is what rev.__iter__() returns
rev2 = next(rev1) # now go on calling next() till you get StopIteration

在 REPL 中输入上述代码段。运行几次。您将会感受到它。

关于python - __iter__ (迭代器和生成器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36489670/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com