当前位置:   article > 正文

python 生成器和迭代器_任何实现了__iter__()和__next__()方法的对象都是迭代器

任何实现了__iter__()和__next__()方法的对象都是迭代器

一、迭代器

任何实现了__iter__()和__next__()方法的对象都是迭代器。

其中,__iter__返回迭代器自身,__next__返回容器中的下一个元素值。

二、生成器

具有yield关键字的函数都是生成器。

yield可以理解为特殊的return,该函数不会释放局部变量。

生成器自动实现了__iter__()和__next()__()方法,也就是说生成器也是迭代器。

调用生成器函数,将返回生成器对象,该生成器对象具有迭代器的所有功能。

详情参考

三、自定义迭代器

  1. class MyNumbersIterator:
  2. def __iter__(self):
  3. self.a = 1
  4. return self # 返回迭代器自身
  5. def __next__(self):
  6. x = self.a
  7. self.a += 1
  8. return x
  9. myclass = MyNumbersIterator()
  10. myiter = iter(myclass) # 通过调用myclass.__iter__()返回迭代器。
  11. print(next(myiter)) # 输出 1
  12. print(next(myiter)) # 输出 2
  13. print(next(myiter)) # 输出 3
  14. print(next(myiter)) # 输出 4
  15. print(next(myiter)) # 输出 5

四、自定义生成器

使用场景,计算斐波那契数,后面的结果依赖于前面。

a = b;

b = a + b

  1. #!/usr/bin/python3
  2. import sys
  3. def fibonacci(n): # 生成器函数 - 斐波那契,返回n个斐波那契数
  4. a, b, counter = 0, 1, 1
  5. while counter <= n: # 生成n个
  6. yield a
  7. a, b = b, a + b # 返回一个斐波那契数,更新a,b,然后循环计算后面一个
  8. counter += 1
  9. f = fibonacci(10) # f 是一个生成器对象,但它同时具有迭代器的所有功能,因为其自动实现了迭代器协议
  10. while True:
  11. try:
  12. print(next(f), end=" ")
  13. except StopIteration:
  14. sys.exit()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/145537
推荐阅读
相关标签
  

闽ICP备14008679号