码迷,mamicode.com
首页 > 编程语言 > 详细

python-生成器

时间:2018-07-18 17:13:12      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:图片   实现   info   turn   结果   可迭代对象   ima   传递值   nbsp   

什么是生成器?

生成器的实质就是迭代器

在python中有三种方式来获取生成器

  1. 通过生成器函数

  2. 通过各种推导式实现生成器

  3. 通过数据的转换也可以获取生成器

技术分享图片

将函数中的return换成yield就是生成器

技术分享图片

运行的结果是不一样的,由于函数中存在了yield,那么这个函数就是一个生成器函数,这个时候,我们再执行这个函数的时候,就不再是函数的执行了,而是获取这个生成器.如果使用呢?想想迭代器,生成器的本质就是迭代器,所以,我们可以直接执行__next__()来执行以下生成器.

技术分享图片

那么我们可以看到,yield和return的效果是一样的,有什么区别呢? 

 yield是分段来执行一个函数,return 呢? 直接停止执行函数

我们来看看send方法,send和__next__()一样都可以让生成器执行到下一个yield.

技术分享图片

send 和 __next__() 的区别:

  1. send和next() 都是让生成器向下走一次

  2. send 可以给上一个yield的位置传递值,不能给最后一个yield发送至.在第一次执行生成器代码的时候不能使用send()

生成器可以使用for循环来获取内部的元素

技术分享图片

 

 

 列表推导式,生成器表达式以及其他推导式

列表推导式的常用方法:

  [结果 for 变量 in 可迭代对象]

筛选模式:

  [结果 for 变量 in 可迭代对象  if  条件]

 

 生成器表达式和列表推导式的语法基本上是一样的,只是把[] 替换成()

 

 生成器表达式和列表推导式的区别:

  1. 列表推导式比较耗内存,一次性加载,生成器表达式几乎不占用内存,使用的时候才分配和使用内存

  2. 得到的值不一样,列表推导式得到的是一个列表,生成器表达式获取的是一个生成器

生成器的惰性机制--------> 生成器只有在访问的时候才取值,说白了,你找他要他才会给你,不找他要,它是不会执行的

 

 字典推导式--------集合推导式

一一有其特征

所以,推导式有: 列表推导式, 字典推导式, 集合推导式,没有元组推导式

 

生成器表达式:  (结果  for 变量 in 可迭代对象 if 条件筛选)

生成器表达式可以直接获取到生成器对象,生成器对象可以直接进行for循环,生成器具有惰性机制

 

python-生成器

标签:图片   实现   info   turn   结果   可迭代对象   ima   传递值   nbsp   

原文地址:https://www.cnblogs.com/ALADL/p/9329167.html

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