迭代器与生成器

Posted chenrongjin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迭代器与生成器相关的知识,希望对你有一定的参考价值。

一、迭代器:

可迭代协议:可以被迭代要满足的要求就叫做可迭代协议。可迭代协议的定义非常简单,就是内部实现了__iter__方法。即可以被for循环的都是可迭代的,要想可迭代,内部必须有一个__iter__方法(‘__iter__‘ in dir(数据))

迭代器协议:迭代器遵循迭代器协议:必须拥有__iter__方法和__next__方法。

 

所学可迭代的类型:字符串、列表、元组、字典、集合f = open() range()enumerate

 

  1. print(dir([]))   #告诉我列表拥有的所有方法  
  2. #打印结果  
  3. ‘‘‘ 
  4. [‘__add__‘, ‘__class__‘, ‘__contains__‘, ‘__delattr__‘, ‘__delitem__‘, ‘__dir__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__getitem__‘, ‘__gt__‘, ‘__hash__‘, ‘__iadd__‘, ‘__imul__‘, ‘__init__‘, ‘__init_subclass__‘, ‘__iter__‘, ‘__le__‘, ‘__len__‘, ‘__lt__‘, ‘__mul__‘, ‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__reversed__‘, ‘__rmul__‘, ‘__setattr__‘, ‘__setitem__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subclasshook__‘, ‘append‘, ‘clear‘, ‘copy‘, ‘count‘, ‘extend‘, ‘index‘, ‘insert‘, ‘pop‘, ‘remove‘, ‘reverse‘, ‘sort‘]  红色部分使我们学过的列表的方法
  5. ‘‘‘  

 

迭代器的特点:

1、很方便使用,且只能取所有的数据取一次

2、节省内存空间

 

二、生成器

生成器函数:常规函数定义,但是,使用yield语句而不是return语句返回结果。yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次重它离开的地方继续执行。

生成器表达式:类似于列表推导,但是,生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表

 

生成器Generator

  本质:迭代器(所以自带了__iter__方法和__next__方法,不需要我们去实现)

特点:惰性运算,开发者自定义

  1. #生成器函数, yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次重它离开的地方继续执行。
  2. def generator():  
  3.     print(1)  
  4.     yield ‘a‘  
  5.     print(2)  
  6.     yield ‘b‘  
  7.     
  8. ret = generator()  
  9. print(ret.__next__())  
  10. print(‘***********‘)  
  11. print(ret.__next__())  
  12.     
  13. #打印结果  
  14. ‘‘‘‘‘ 
  15. 1 
  16. a 
  17. *********** 
  18. 2 
  19. b 
  20. ‘‘‘  

 

 

 

以上是关于迭代器与生成器的主要内容,如果未能解决你的问题,请参考以下文章

迭代器与生成器

迭代器与生成器

python3 迭代器与生成器

Python3 迭代器与生成器

Python的迭代器与生成器

迭代器与生成器