>> Cla-6ren">
gpt4 book ai didi

python - 对 python 中的 "iterators"感到困惑

转载 作者:太空宇宙 更新时间:2023-11-04 10:43:09 25 4
gpt4 key购买 nike

我正在学习python Beginning Python: From Novice to Professional这本书,我对讨论 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
... return self.a
... def __iter__(self):
... return self
...
>>> fibs = Fibs()
>>> for f in fibs:
... if f > 1000:
... print(f)
... break
...
1597

老实说,我只知道fibs是一个有方法__next____iter__的对象,但不知道里面发生了什么循环的每一步。我做了一个测试:

>>> isinstance(f, Fibs)
False
>>> f is fibs
False
>>> isinstance(f, int)
True
>>> fibs.a
1597

这让我更加困惑了!为什么f is fibs 的 bool 值是False?还有为什么fibs.a执行完循环后变成1597?(__next__方法是在循环中自动调用的吗?)先谢谢了。

最佳答案

 1  fibs = Fibs()
2 for f in fibs:
3 if f > 1000:
4 print(f)
5 break

第 1 行创建一个 Fibs() 对象,调用 __init__()。第 2 行调用 __iter__(),它返回一个迭代器对象(在本例中,只是 fibs 本身)。然后解释器将开始重复调用 __next__() 方法;它返回 self.a,一个普通数字,它被分配给循环变量 f(所以它当然不是 Fibs() 对象,当然也不是名为 fibs 的对象).当该值达到 1000 时,if 子句将触发,打印结果并跳出循环。

关于python - 对 python 中的 "iterators"感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19297052/

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