python之迭代器和生成器

 可迭代对象

  什么是可迭代对象,简单的理解就是可以用作for循环上的一些对象就是可迭代对象。常见的可以迭代对象有哪些呢?

  列表、元组、字典、集合字符串和open()打开的文件

  从代码角度来说,对象内部实现了__iter__()方法或者实现了__getitem__()的方法

迭代器 

  迭代器是相对于可迭代对象(iterable)来说的,迭代器是继承了可迭代对象的。它相对于It而able而言,它实现了__iter__()和__next()__方法。

另外,迭代器不会一次性把所有的元素都加载到内存中,只是在需要的时候才返回结果。可以把一个可迭代对象通过一定的方法转变为迭代器。  

  字符串,列表或元祖对象可以通过 iter()来进行创建转换成迭代器
  输出值通过next()函数来输出。
  迭代器只能向前输出,不能向后输出。

 

 

异常捕获

 

 生成器 

  在python中,使用了yield的函数被称为生成器
  在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。
  调用一个生成器函数,返回的是一个迭代器对象。

 

 

 

生成器表达式

 

 

 

遍历的时候一般用for循环去遍历,如果用next遍历,到最后会抛出一个停止的异常,不太友好

 

 

 创造一个迭代器

  把一个类作为一个迭代器使用需要实现2个方法__iter__()和__next()__

 

 

生成器的核心优势

  不一次全部把数据加载进来,在需要的时候才加载进来。这样就能够避免大量的内存消耗,当然这里肯定是有一部分速度的损失的。

 

posted @ 2020-11-13 16:53  7dao  阅读(58)  评论(0编辑  收藏  举报