码迷,mamicode.com
首页 > 其他好文 > 详细

生成器与迭代器

时间:2019-01-16 16:41:51      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:return   原理   需要   名词解释   用法   判断   特殊用法   区别   就会   

生成器:

  名词解释:生成数据的工具;生成从无到有的过程;工具可以直接看成是函数,我们可以自己定义一个函数来产生数据,但是每次执行函数只能产生一次数据,生成器的目的就是可以多次(不断地)生成数据。 

  在python中生成器就是一个函数,但是函数内部具备至少一个yield关键字,反过来只要函数中出现了yield,那么该函数就是一个生成器。

  yield关键字

  一旦函数中出现了yield,调用函数体就不会立即执行函数体,并且会返回一个生成器对象

  当调用生成器的next方法时会执行函数体,但是执行期间遇到了yield函数体就会暂停执行

  每一次调用next都是从上一次yield为位置继续往下执行,同时会将yield后的数据返回给调用者

yield与return的区别

  都能返回一个值

  return只能返回一个值,只要返回return函数整体就结束了

  yield可以返回多个值,并且会在返回后将函数暂停住

生成器就是迭代器:

  生成器同时具备iter和next函数,这证明其就是一个迭代器,所以可以直接用for遍历

  迭代器就是通过生成器实现的

 

迭代器,生成器,与for之间的关系:

  for的原理是使用迭代器取值;迭代器就是通过生成器实现的

了解知识点:

  yield的特殊用法:

    当生产器需要外界数据参与时,生成器如何接收外界数据

    闭包和参数都能传数据到生成器中,但是都只能接收一次值

  send函数用于生成器发送数据,但是要注意必须先进行初始化,也就是先调用一次__next__方法

 

迭代器(iterator):

  什么是迭代器:

    迭代器就是跟新换代的一种工具。迭代的目的是根据上一个结果,产生下一个结果的工具,简单的说就是一种获取数据的工具

可迭代的对象:指的是可以使用迭代器取出的对象

如何判断一个对象是否可迭代:看这个对象是否提供迭代器,通过对象调用__iter__来获取迭代器

              所有的容器类型都是可迭代的

注意:带有__开头__结尾的方法都是内置的特殊方法,会在某个时间自动执行

如何使用:

  1、通过调用对象的__iter__()方法得到迭代器

  2、调用迭代器的__next__方法来获取每一个值

如何判断一个对象是不是迭代器?

  迭代是为了取值,取值使用next方法,只要对象具备next方法就是迭代器(文件也是迭代器)

为什么选用迭代器:为了统一取值方式

迭代器总结:

  迭代器是一种通用的取值工具,只要具备__iter__()方法的对象才能被迭代器取值,成为可迭代对象  

  迭代器是为了取值,只要具备了next方法的就是迭代器

  python中的迭代器同时具备iter方法和next方法,调用iter将返回迭代器自身

  每一种数据类型内部的迭实现都各不相同

注意:迭代器一定是可迭代对象,但是迭代对象不一定是迭代器

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 

 

 

 

 

 

 

  

  

  

 

生成器与迭代器

标签:return   原理   需要   名词解释   用法   判断   特殊用法   区别   就会   

原文地址:https://www.cnblogs.com/zhangzhechun/p/10277273.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!