今日主要内容
1. 生成器和生成器函数
  生成器的本质就是迭代器
  生成器的三种创建办法:
    1.通过生成器函数
    2.通过生成器表达式创建生成器
    3.通过数据转换

2. 生成器函数:
  函数中包含了yield的就是生成器函数
  注意:生成器函数被执行. 获取到的是生成器. 而不是函数的执行

3. 与return比较

  函数中存在yield,

    优点:用多少生成多少

        节约内存

        yield 返回结果,让函数分段执行

        return 直接返回函数结果,结束函数的调用

def func():
yield 11
yield 22
yield 33
yield 44
g = func() # 拿到的是生成器. 生成器的本质是迭代器. 迭代器可以被迭代 生成器可以直接for循环
for i in g:
print(i) # 本质上执行的是__next__()
it = g.__iter__()
while True:
try:
print(it.__next__())
except StopIteration:
break

  

4. send和__next__()区别:

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

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

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

6. 取值:
  1. __next__()
  2. send(值) 给上一个yield位置传一个值, 第一个和最后一个yield不用传值
  3. 可以for循环 (获取内部的元素:)
  4. list(g)

2. 各种推倒式和生成器表达式
  1. 列表推倒式 [结果 for 变量 in 可迭代对象 if 筛选]

    lst = [i for i in range(1, 15)]

    print(lst)
  2. 字典推倒式 {结果 for 变量 in 可迭代对象 if 筛选} 结果=>key:value
  3. 集合推倒式 {结果 for 变量 in 可迭代对象 if 筛选} 结果=>key

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

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

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

生成器的惰性机制:⽣生成器只有在访问的时候才取值. 说⽩白了了. 你找他要他才给你值. 不找他 要. 他是不会执⾏行行的.
def func():
print(111)
yield 222
g = func() # ⽣生成器器g
g1 = (i for i in g) # ⽣生成器器g1. 但是g1的数据来源于g
g2 = (i for i in g1) # ⽣生成器器g2. 来源g1 print(list(g)) # 获取g中的数据. 这时func()才会被执⾏行行. 打印111.获取到222. g完毕.
print(list(g1)) # 获取g1中的数据. g1的数据来源是g. 但是g已经取完了了. g1 也就没有数据 了了
print(list(g2)) # 和g1同理理 例2 惰性机制的应用
def add(a, b):
return a + b
def gen():
for r_i in range(4):
yield r_i
g = gen()
for n in [2, 10]:
g = (add(n, i) for i in g)
#g = (add(n,i) for i in (add(n, i) for i in g)) #g 由于惰性机制,for循环第一次并未取值
# g = (add(10,i) for i in (add(10, i) for i in (0,1,2,3)))
print(list(g))

  

day 13 生成器函数 表达式 推导式的更多相关文章

  1. python之生成器(~函数,列表推导式,生成器表达式)

    一.生成器 概念:生成器的是实质就是迭代器 1.生成器的贴点和迭代器一样,取值方式也和迭代器一样. 2.生成器一般由生成器函数或者声称其表达式来创建,生成器其实就是手写的迭代器. 3.在python中 ...

  2. python基础之生成器,生成器函数,列表推导式

    内容梗概: 1. 生成器和生成器函数. 2. 列表推导式. 1.生成器函数1.1 生成器函数. 就是把return换成yield def gen(): print("爽歪歪") y ...

  3. 巨蟒python全栈开发-第12天 生成器函数 各种推导式 yield from

    一.今日主要内容总览(重点) 1.生成器(目的:帮助我们创建对象) (1)生成器的本质就是迭代器 (2)一个一个的创建对象 (3)创建生成器的方式: 1.生成器函数 2.通过生成器表达式来获取生成器 ...

  4. Python进阶(四)----生成器、列表推导式、生成器推导式、匿名函数和内置函数

    Python进阶(四)----生成器.列表推导式.生成器推导式.匿名函数和内置函数 一丶生成器 本质: ​ 就是迭代器 生成器产生的方式: ​ 1.生成器函数

  5. Python_迭代器、生成器、列表推导式,生成器表达式

    1.迭代器 (1)可迭代对象 s1 = ' for i in s1: print(i) 可迭代对象 示例结果: D:\Python36\python.exe "E:/Python/课堂视频/ ...

  6. Python函数——列表推导式、生成器与迭代器

    列表推导式 产生背景 现在有个需求,看列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],要求你把列表里的每个值加1,你怎么实现? 第一种方法: a = [1,3,4,6,7,7,8,9 ...

  7. day11 - 15(装饰器、生成器、迭代器、内置函数、推导式)

    day11:装饰器(装饰器形成.装饰器作用.@语法糖.原则.固定模式) 装饰器形成:最简单的.有返回值的.有一个参数的.万能参数 函数起的作用:装饰器用于在已经完成的函数前后增加功能 语法糖:使代码变 ...

  8. day5--装饰器函数的信息打印,迭代器,生成器,列表推导式,内置函数

    本文档主要内容: 一 装饰器函数的信息打印 二 迭代器 三 生成器 四 生成器表达式和列表推导式 五 内置函数 一 装饰器函数的信息打印 一个函数一旦被装饰器给装饰后,这个函数的信息使用原来的命令打印 ...

  9. python基础学习Day12 生成器、列表推导式、字典的表达式、字典键值对的互换、集合推导式

    一.生成器 1.1 生成器:就是(python)自己用代码写的迭代器,生成器的本质就是迭代器. 1.2 生成器函数 def func1(x): x += print() yield x print() ...

随机推荐

  1. Spring(四)Spring与数据库编程

    Spring最重要的功能毫无疑问就是操作数据.数据库的百年城是互联网编程的基础,Spring为开发者提供了JDBC模板模式,那就是它自身的JdbcTemplate.Spring还提供了Transact ...

  2. SpringBoot2.X整合Actuator

    一 说明 Actuator 的定义 actuator 是一个制造术语,指的是用于移动或控制某物的机械装置.执行器可以通过一个小的变化产生大量的运动. 要将 actuator 添加到基于 Maven 的 ...

  3. 安装实时查看日志工具 log.io

    官网:http://logio.org/ 一.环境 [root@centos ~]# cat /etc/system-release CentOS release 6.5 (Final) [root@ ...

  4. 洛谷P5520 【[yLOI2019] 青原樱】

    这题是小学奥数啊. 题意:求\(m\)个不同物品两两不相邻的方案数. 直接排列组合. 我们可以减掉他们之间最少需要空出来的位数--\(m-1\)个空位 像这样,我们只用留\(m-1\)个空位放在每两个 ...

  5. MAC配置JAVA环境变量

    一.下载安装文件 地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html jdk-8u144-macosx-x64. ...

  6. 使用jieba分析小说人物出现次数

    分析: 1. 读取小说,以读的形式打开 with open('文件名.txt','r',encoding='utf8') as f: str = f.read() 2. 切割小说 ret = jieb ...

  7. VSCode JAVA环境配置使遇到的几个小问题

    1.出现的问题: The JAVA_HOME environment variable points to a missing or inaccessible folder等三个报错! 2.说明及解决 ...

  8. 深入理解计算机系统 第九章 虚拟内存 Part1 第二遍

    这次花了4小时40分钟,看了第 559~575 页,共 17 页 第一遍对应地址 https://www.cnblogs.com/stone94/p/10264044.html 注意:本章的练习题一定 ...

  9. 《计算机网络 自顶向下方法》 第8章 计算机网络中的安全 Part2

    SSL(使 TCP 连接安全) SSL(Secure Socket Layer),即安全套接字层,是对 TCP 的强化 HTTPS 使用 SSL,而 HTTP 不使用 SSL 通过采用机密性.数据完整 ...

  10. fpm打包神奇rpm包升级python2.7.16

    fpm打包神器参考文档:https://www.cnblogs.com/flintlovesam/p/6594635.html FPM的安装:安装ruby环境和gem命令: yum -y instal ...