1. 生成器和生成器表达式
    一:生成器
  1. 生成器实质上就是迭代器。
  1.   三种方式获取生成器:
  2. 01:通过生成器函数
  3. 02:通过各种推导式实现生成器
  4. 03:通过数据的转换也可以获取生成器
  1. eg:普通函数
  2. def fun()
  3. print("")
  4. return
  5. ret=func()
  6. print(ret)
  7. 结果:
  8. 111
  9. 222
  1. 将函数的return 换成yield 就是生成器
  2. def fun()
  3. print("")
  4. yield
  5. ret=func()
  6. print(ret)
  7. 结果:<generator object func at 0x10567ff68>
  8. 打印结果:结果是一个函数名字的内存地址
  1. 原因:由于函数中存在了yield. 那么这个函数就是⼀个⽣成器
  2. 函数. 这个时候. 我们再执⾏这个函数的时候. 就不再是函数的执⾏了.
  3. ⽽是获取这个⽣成器.如何使⽤呢? 想想迭代器. ⽣成器的本质是迭代器.
  4. 所以. 我们可以直接执⾏__next__()来执⾏
  5. 其实returnyield一样都有返回值,return返回值后,就退出函数,后面的函数就不在执行
  6. yield 则是在返回 返回值后 ,还给上一个yield 的变量赋值

案例结果说明

  1. 例如:
  2. def eat():
  3. print("我吃什么啊")
  4. a = yield "馒头"
  5. print("a=",a)
  6. b = yield "⼤饼"
  7. print("b=",b)
  8. c = yield "⾲菜盒⼦"
  9. print("c=",c)
  10. yield "GAME OVER"
  11. gen = eat() # 获取⽣成器
  12. ret1 = gen.__next__()
  13. print(ret1)
  14. ret2 = gen.send("胡辣汤")
  15. print(ret2)
  16. ret3 = gen.send("狗粮")
  17. print(ret3)
  18. ret4 = gen.send("猫粮")
  19. print(ret4)
  20.  
  21. 打印结果:send__next__()区别:
  22. 1. sendnext()都是让⽣成器向下走⼀次
  23. 2. send可以给上⼀个yield的位置传递值, 不能给最后⼀个yield发送值.
  24. 在第⼀次执⾏⽣
  25. 成器代码的时候不能使⽤send()

案例解释

  1. 二:生成器的作用:
  1. 生成器可以用for循环来循环获取内部的元素:
  1. def func():
  2. print(111)
  3. yield 222
  4. print(333)
  5. yield 444
  6. print(555)
  7. yield 666
  8. gen = func() #这里并没有直接执行这个函数,只是获取了这个函数生成器,
  9. for i in gen: #在循环这个函数后,生成器才会执行func()这个函数。i才会找gen要值,func才会执行
  10. print(i)
  11. 结果:
  12. 111
  13. 222
  14. 333
  15. 444
  16. 555
  17. 666
  1.  
  1. 三:列表推导式:
  1.   例如:
  2. lst = []
  3. for i in range(1, 15):
  4. lst.append(i)
  5. print(lst)
  6. 这个代码块是,给出一个列表,通过循环,将数字添加到新的列表中去
  1. 001):可以用列表推导式:
  1.     lst = [i for i in range(1, 15)]
  2. print(lst)
  3. 列表是常用写法:
  4. [ 结果 for 变量 in 可迭代对象]
  1. 002):列表推导式还可以用来筛选
  1. 获取1-100内所有的偶数
  2. lst = [i for i in range(1, 100) if i % 2 == 0]
  3. print(lst)
  1. 四:生成器和列表推导式的区别:
  1.   生成器: yield的函数体
  2. 列表推导式:( [ 结果 for 变量 in 可迭代对象]
  3. 列表推导式是通过一行来构建我们需要的列表,列表推导式看起来代码简单。但是出了
  4. 错误很难排查!
  1. 五:生成器表达式:
    001):⽣成器表达式和列表推导式的语法基本上是⼀样的. 只是把[]替换成()
      

  1. gen = (i for i in range(10))
  2. print(gen)
  3. 结果:
  4. <generator object <genexpr> at 0x106768f10>
  5.  
  6. 打印的结果就是⼀个⽣成器. 我们可以使⽤for循环来循环这个⽣成器:
  7. gen = ("麻花藤我第%s次爱你" % i for i in range(10))
  8. for i in gen:
  9. print(i)
  1. 六:⽣成器表达式和列表推导式的区别:
  1.   1. 列表推导式比较耗内存. ⼀次性加载. ⽣成器表达式⼏乎不占⽤内存. 使⽤的时候才分
  2.   配和使⽤内存
  3. 2. 得到的值不⼀样. 列表推导式得到的是⼀个列表. ⽣成器表达式获取的是⼀个⽣成器.

    举个栗⼦.

    

  1. 同样⼀篮⼦鸡蛋. 列表推导式: 直接拿到⼀篮⼦鸡蛋. ⽣成器表达式: 拿到⼀个老⺟鸡. 需要
  2. 鸡蛋就给你下鸡蛋.
  3. ⽣成器的惰性机制: ⽣成器只有在访问的时候才取值. 说⽩了. 你找他要他才给你值. 不找他
  4. 要. 他是不会执⾏的.
  1. 七:总结: 推导式有, 列表推导式, 字典推导式, 集合推导式, 没有元组推导式
  1.   ⽣成器表达式: (结果 for 变量 in 可迭代对象 if 条件筛选)
  2. ⽣成器表达式可以直接获取到⽣成器对象. ⽣成器对象可以直接进⾏for循环. ⽣成器具有
  3. 惰性机制.
  1.  
  1.  

python学习之路---day12的更多相关文章

  1. ql的python学习之路-day12

    前言:这一节主要学习json和pickle 背景: 相信大家在日常生活中都有接触大型的网络游戏,打游戏的时候都是自己在电脑上操作,自己刷怪升级:当然也会碰到中午去吃饭然后挂机的情况,让电脑自动的刷怪, ...

  2. python学习之路-day2-pyth基础2

    一.        模块初识 Python的强大之处在于他有非常丰富和强大的标准库和第三方库,第三方库存放位置:site-packages sys模块简介 导入模块 import sys 3 sys模 ...

  3. Python学习之路-Day2-Python基础3

    Python学习之路第三天 学习内容: 1.文件操作 2.字符转编码操作 3.函数介绍 4.递归 5.函数式编程 1.文件操作 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个 ...

  4. Python学习之路-Day2-Python基础2

    Python学习之路第二天 学习内容: 1.模块初识 2.pyc是什么 3.python数据类型 4.数据运算 5.bytes/str之别 6.列表 7.元组 8.字典 9.字符串常用操作 1.模块初 ...

  5. Python学习之路-Day1-Python基础

    学习python的过程: 在茫茫的编程语言中我选择了python,因为感觉python很强大,能用到很多领域.我自己也学过一些编程语言,比如:C,java,php,html,css等.但是我感觉自己都 ...

  6. python学习之路网络编程篇(第四篇)

    python学习之路网络编程篇(第四篇) 内容待补充

  7. Python学习之路【第一篇】-Python简介和基础入门

    1.Python简介 1.1 Python是什么 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是 ...

  8. python 学习之路开始了

    python 学习之路开始了.....记录点点滴滴....

  9. python学习之路,2018.8.9

    python学习之路,2018.8.9, 学习是一个长期坚持的过程,加油吧,少年!

随机推荐

  1. 刷题向》图论》BZOJ1001 平面图最大流、平面图最小割、单源最短路(easy+)

    坦白的说这是一道水题,但是因为是BZOJ上的1001,所以这道题有着特殊的意义. 关于最大流转最短路的博客链接如下:关于最大流转最短路两三事 这道题的图形很规矩,所以建边和建点还是很简单的. 题目如下 ...

  2. zynq qemu学习

    1,ubuntu给软件包降级,先安装aptitude sudo apt-get  install aptitude 2,强制降级,等号“=”前后不能有空格 sudo aptitude install ...

  3. 堡垒机(paramiko)

    实现思路 堡垒机执行流程: 管理员为用户在服务器上创建账号(将公钥放置服务器,或者使用用户名密码) 用户登陆堡垒机,输入堡垒机用户名密码,现实当前用户管理的服务器列表 用户选择服务器,并自动登陆 执行 ...

  4. HandleErrorAttribute只能处理httpStatusCode为500的异常(服务器异常)

    HandleErrorAttribute源代码: [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited ...

  5. linux下SVN服务器配置

    SVN服务器配置 1. 安装svn服务 yum install subversion 2. 新建一个目录用于存储SVN所有文件 mkdir /home/svn 3. 创建项目 在上面创建的文件夹中为项 ...

  6. leetcode Submission Details

    代码: #include<iostream> #include<vector> using namespace std; struct ListNode { int val; ...

  7. 很棒的git和python学习网站

    很棒的git和python学习网站:http://www.liaoxuefeng.com/ 博主名叫廖雪峰

  8. ORACLE_ERP帐务分录

      ORACLE MRPII各模块会计分录   第一章 采购模块 一.资产采购(科目来源:库存组织) 1.物料接收 借  材料采购     接收数量*采购单价 贷 应计暂估     接收数量*采购单价 ...

  9. Func和Action的介绍及其用法

    Func是一种委托,这是在3.5里面新增的,2.0里面我们使用委托是用Delegate,Func位于System.Core命名空间下,使用委托可以提升效率,例如在反射中使用就可以弥补反射所损失的性能. ...

  10. react-native-echarts构建的图表出现滚动条并且可以滑动的问题

    前段时间做echarts饼状图,按照官方提供的写法完成以后图表可以出来,但是虚拟机上演示出现了滚动条,并且拖动时就会出现空白,双击会缩小像这样       参考GitHub上给出的方法修改成功: no ...