今日主要内容
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. SpringCloud Config(配置中心)实现配置自动刷新(十六)

    一.实现原理 1.ConfigServer(配置中心服务端)从远端git拉取配置文件并在本地git一份,ConfigClient(微服务)从ConfigServer端获取自己对应 配置文件: 2.当远 ...

  2. Java基础系列1:Java面向对象

    该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 概述: Java是面 ...

  3. UIScrollView的contentView 助于理解

  4. NodeJs 实现 WebSocket 即时通讯(版本二)

    服务端代码 websocket.js 'use strict' const WebSocket = require('ws'); const connections = new Map(); cons ...

  5. Mysql用户管理及权限分配

    早上到公司,在服务器上Mysql的数据库里新建了个database,然后本地的系统里用原来连接Mysql账号admin连这个数据库.结果报错了,大概是这样子的: Access denied for u ...

  6. go中的数据结构字典-map

    1. map的使用 golang中的map是一种数据类型,将键与值绑定到一起,底层是用哈希表实现的,可以快速的通过键找到对应的值. 类型表示:map[keyType][valueType] key一定 ...

  7. CAS3.5.2 Server登录后返回用户信息详细解决方案

    单点登录(Single Sign-On, 简称SSO)是目前比较流行的服务于企业业务整合的解决方案之一,SSO使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.大家在使用时CA ...

  8. javascript 解决默认取整的坑(目前已知的最佳解决方案)

    javascript 解决默认取整的坑(目前已知的最佳解决方案) 复现该问题 js在数字操作时总会取更高精度的结果,例如1234/10结果就是123.4,但是在c或者java中整数除以10的结果还是整 ...

  9. 『嗨威说』算法设计与分析 - 贪心算法思想小结(HDU 2088 Box of Bricks)

    本文索引目录: 一.贪心算法的基本思想以及个人理解 二.汽车加油问题的贪心选择性质 三.一道贪心算法题点拨升华贪心思想 四.结对编程情况 一.贪心算法的基本思想以及个人理解: 1.1 基本概念: 首先 ...

  10. flink 流式处理中如何集成mybatis框架

    flink 中自身虽然实现了大量的connectors,如下图所示,也实现了jdbc的connector,可以通过jdbc 去操作数据库,但是flink-jdbc包中对数据库的操作是以ROW来操作并且 ...