生成器和生成器表达式一:生成器
生成器实质上就是迭代器。

  三种方式获取生成器:01:通过生成器函数02:通过各种推导式实现生成器03:通过数据的转换也可以获取生成器

eg:普通函数def fun()print("111")returnret=func()print(ret)结果:111222

 将函数的return  换成yield  就是生成器def fun()print("111")yieldret=func()print(ret)结果:<generator object func at 0x10567ff68>打印结果:结果是一个函数名字的内存地址

原因:由于函数中存在了yield. 那么这个函数就是⼀个⽣成器函数. 这个时候. 我们再执⾏这个函数的时候. 就不再是函数的执⾏了.⽽是获取这个⽣成器.如何使⽤呢? 想想迭代器. ⽣成器的本质是迭代器.所以. 我们可以直接执⾏__next__()来执⾏其实return和yield一样都有返回值,return返回值后,就退出函数,后面的函数就不在执行yield 则是在返回  返回值后 ,还给上一个yield 的变量赋值 

案例结果说明

例如:def eat():print("我吃什么啊")a = yield "馒头"print("a=",a)b = yield "⼤饼"print("b=",b)c = yield "⾲菜盒⼦"print("c=",c)yield "GAME OVER"gen = eat() # 获取⽣成器ret1 = gen.__next__()print(ret1)ret2 = gen.send("胡辣汤")print(ret2)ret3 = gen.send("狗粮")print(ret3)ret4 = gen.send("猫粮")print(ret4)打印结果:send和__next__()区别:1. send和next()都是让⽣成器向下走⼀次2. send可以给上⼀个yield的位置传递值, 不能给最后⼀个yield发送值.在第⼀次执⾏⽣成器代码的时候不能使⽤send()

案例解释

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

def func():print(111)yield 222print(333)yield 444print(555)yield 666gen = func()  #这里并没有直接执行这个函数,只是获取了这个函数生成器,for i in gen:  #在循环这个函数后,生成器才会执行func()这个函数。i才会找gen要值,func才会执行print(i)结果:111222333444555666

三:列表推导式:
  例如:lst = []for i in range(1, 15):lst.append(i)print(lst)这个代码块是,给出一个列表,通过循环,将数字添加到新的列表中去

    001):可以用列表推导式:
     lst = [i for i in range(1, 15)]print(lst)列表是常用写法:[ 结果 for 变量 in 可迭代对象]

    002):列表推导式还可以用来筛选
        获取1-100内所有的偶数lst = [i for i in range(1, 100) if i % 2 == 0]print(lst)

四:生成器和列表推导式的区别:
  生成器: 有yield的函数体列表推导式:(  [ 结果 for 变量 in 可迭代对象] )列表推导式是通过一行来构建我们需要的列表,列表推导式看起来代码简单。但是出了错误很难排查!

五:生成器表达式:    001):⽣成器表达式和列表推导式的语法基本上是⼀样的. 只是把[]替换成()

gen = (i for i in range(10))print(gen)结果:<generator object <genexpr> at 0x106768f10>打印的结果就是⼀个⽣成器. 我们可以使⽤for循环来循环这个⽣成器:gen = ("麻花藤我第%s次爱你" % i for i in range(10))for i in gen:print(i)

View Code

六:⽣成器表达式和列表推导式的区别:
  1. 列表推导式比较耗内存. ⼀次性加载. ⽣成器表达式⼏乎不占⽤内存. 使⽤的时候才分配和使⽤内存2. 得到的值不⼀样. 列表推导式得到的是⼀个列表. ⽣成器表达式获取的是⼀个⽣成器.

    举个栗⼦.

同样⼀篮⼦鸡蛋. 列表推导式: 直接拿到⼀篮⼦鸡蛋. ⽣成器表达式: 拿到⼀个老⺟鸡. 需要鸡蛋就给你下鸡蛋.⽣成器的惰性机制: ⽣成器只有在访问的时候才取值. 说⽩了. 你找他要他才给你值. 不找他要. 他是不会执⾏的.

View Code

七:总结: 推导式有, 列表推导式, 字典推导式, 集合推导式, 没有元组推导式
   ⽣成器表达式: (结果 for 变量 in 可迭代对象 if 条件筛选)⽣成器表达式可以直接获取到⽣成器对象. ⽣成器对象可以直接进⾏for循环. ⽣成器具有惰性机制.

转载于:https://www.cnblogs.com/one-tom/p/9892592.html

python学习之路---day12相关推荐

  1. python之路 mysql 博客园_教为学:Python学习之路(二):MySQLdb的几种安装方式,以及用Python测试连接MySql...

    教为学:Python学习之路(二):MySQLdb的几种安装方式,以及用Python测试连接MySql Easy_install安装MySQLdb 很简单,以至于我不晓得该怎么说.一句话. sodu ...

  2. Python学习之路—2018/7/14

    Python学习之路-2018/7/12 3.功能开发 3.3 设计博客首页 博客首页中最重要的就是中间的文章区域,所以我首先把文章区域设计出来,一开始并没有数据,如果用orm添加或者直接在数据库添加 ...

  3. Python学习之路—2018/6/20

    Python学习之路-2018/6/20 1.模板语法之变量 views.py def index(request):import datetimes="gyq"l=[1,2,3] ...

  4. Python学习之路9☞面向对象的程序设计

    Python学习之路9☞面向对象的程序设计 一 面向对象的程序设计的由来 见概述:http://www.cnblogs.com/linhaifeng/articles/6428835.html 二 什 ...

  5. python 学习之路开始了

    python 学习之路开始了.....记录点点滴滴.... 转载于:https://www.cnblogs.com/chobit/p/6163287.html

  6. Python学习之路5☞文件处理

    Python学习之路5☞文件处理 一.文件处理流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 1 正趣果上果 2 Interesting fruit fruit 3 4 ...

  7. python学习之路0x00

    Python学习之路0x00 在学习python之前,要知道什么是python? python是一种跨平台的计算机程序设计语言.是一种面向对象的动态类型语言,与c语言不同, c语言要编译后才能执行.而 ...

  8. 我的Python学习之路(一)_Mr_Ouyang

    我的Python学习之路(一)_Mr_Ouyang 笔者按: 本文从18:55开始写作,至19:38中断,又从21:12始继续,至23:22写就. 共计耗时113分钟,总字数9081字,约80.4字/ ...

  9. 一木.溪桥---Python学习之路

    一木.溪桥---Python学习之路 1.工作十年常常想起的一些人和一些事 2.选择学习Python的初衷 1.工作十年常常想起的一些人和一些事 我是一名成套电气工程师,专业是电气工程及其自动化(供配 ...

最新文章

  1. python使用matplotlib可视化棉签图、棉棒图(stem plot)、展示离散而有序的数据
  2. 【APP】squid 3.0反向代理配置
  3. Tomcat虚拟路径
  4. OpenCV2:图像滤波基础
  5. React开发(220):缺少form.create
  6. Skip宏块与Direct预测模式浅析
  7. 内卷的世界,我们是否可以换一种思维生活?
  8. Shield——开源的移动端页面模块化开发框架
  9. libuv 网络库设计概览译
  10. SpringMVC @ControllerAdvice 注解的官方解释
  11. CSS3 新怎的伪类选择器
  12. 各种求最大公约数的函数
  13. CAN报文解析SIGNAL的C语言实现
  14. 【白嫖系列-怕违规】告别BDWP龟速下载,体验飞一般的感觉
  15. linux分区卡住,紧张!正在安ubuntu9.10,分区卡住!
  16. win10 redis注册成服务自启动
  17. 联通光猫CUAdmin获取
  18. AGV|简单粗暴分类及其各自优劣势
  19. pocketsphinx 模型库_[转] PocketSphinx语音识别系统声学模型的训练与使用
  20. C#中sealed的用法

热门文章

  1. 国庆长假前不妨先来做完这份 JavaScript 测验吧!因为......
  2. 无SSH工具部署网站到火腿云
  3. 云南tc焊接机器人价格_吉安自动焊接机器人生产厂家
  4. 20210701:随机信号的功率谱估计相关算法的实现
  5. 如何linux安装apache服务器,Linux中如何安装Apache服务器
  6. php如何防止重复提交表单,如何防止php重复提交表单方法
  7. python 输出list到txt_python脚本生成caffe train_list.txt的方法
  8. 计算机系要考英语口语吗,2015年高考英语口语由计算机“打分”,这些细节要注意!...
  9. 查看oracle的版本、所在表空间、字符集及查询一个表的所有字段名和数据类型
  10. Linux 常用C函数说明-文件权限控制篇