今日主要内容
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. Leetcode Tags(8)Binary Search

    一.475. Heaters 输入: [1,2,3],[2] 输出: 1 解释: 仅在位置2上有一个供暖器.如果我们将加热半径设为1,那么所有房屋就都能得到供暖. 输入: [1,2,3,4],[1,4 ...

  2. Leetcode Tags(1)Linked List

    1.知识点回顾 https://www.cnblogs.com/BigJunOba/p/9174206.html https://www.cnblogs.com/BigJunOba/p/9174217 ...

  3. 设计模式C++描述----04.观察者(Observer)模式

    一. 概述 Observer 模式要解决的问题为:建立一个一(Subject)对多(Observer)的依赖关系,并且做到当“一”变化的时候,依赖这个“一”的多也能够同步改变. Sbuject 相当于 ...

  4. linux虚拟机(centos7)常见配置解析

    1. 场景描述 在win7下安装了多台虚拟机,安装后常用的几个配置记录下,因安全策略,采用的仅主机模式(内网). 2. 解决方案 2.1.更改主机名称 (1)更改主机名称,不是连接的名称,是hostn ...

  5. 在虚拟机上的关于Apache(阿帕奇)(1)开启Apache服务以及介绍基础服务

    我们来开始讲述Apache(阿帕奇)服务 小知识: Apache   使得一台服务器上放很多网站,网站同时访问  可以使网站更安全(木马如果是root权限  如果webshell  apache 可用 ...

  6. Web信息搜集

    文件是转载原文https://www.freebuf.com/articles/web/204883.html  如有侵权 请联系 对一个网站挖掘的深浅来说,信息收集是非常的重要的,这篇文章主要分享本 ...

  7. 【java基础】为什么重写toString()方法?

    不得不说,有很多java初学者写java实体类的时候,并没有真正理解重写toString() 方法,可能是口头知道也可能是跟风随带添加toString() 方法,并没有真正理解其意义,如果真要被问起来 ...

  8. [考试反思]0903NOIP模拟测试36:复始

    因为多次被说颓博客时间太长于是 真香 恢复粘排行榜的传统. 大体上就是,T1A的前三,剩下的T2A的排名,再然后按照T3暴力得分排名. T1是个暴力.3个A的5个得分的.数据点极强爆零率极高. 我的思 ...

  9. MySQL 语句执行过程详解

    MySQL 原理篇 MySQL 索引机制 MySQL 体系结构及存储引擎 MySQL 语句执行过程详解 MySQL 执行计划详解 MySQL InnoDB 缓冲池 MySQL InnoDB 事务 My ...

  10. python爬虫-携程-eleven参数

    携程-eleven分析 一.eleven的位置 通过对旁边栈的分析,它是在另一个js文件中调用的.那个js文件是一个自调用的函数,所以我们可以直接copy下来,用浏览器执行看看 执行运行是会报错的,u ...