一、生成器和生成器函数
1、生成器和生成器函数的概念

1、生成器的本质是迭代器
2、函数中包含yield,就是生成器函数 2、生成器函数的写法
def func():
a =10
yield 20
gen = func() #没有执行,而是生成一个生成器
普通函数和生成器函数的不同
1、普通函数名()表示函数的的执行
2、生成器函数名()不是函数的执行,而是生成一个生成器 yield和return的不同
1、retun表示返回,同时函数执行终止,return之后的代码不会执行
2、yield也表示返回,函数暂停,函数分段执行 def func():
a =10
yield 20
b = 30
yield 40
gen = func() #生成一个生成器
gen.__next__() #返回20 执行到第一个yield
gen.__next__() #返回40 从第一个yeild开始执行到第二个yield 3、如何得到生成器
1、生成器函数
生成器函数名()
2、生成器表达式
3、类型转换 4、生成器的特点
1、节省内存
2、惰性机制(每执行一次__next__()方法,取值一次)
3、只能向前取值,不能退后 5、生成器的取值
__next__()方法和send()方法的区别
前者表示向下取值
后者除了表示向下取值,还可以给上一个yield传递值
注意:send()方法不能用在第一个取值,第一个取值只能用__next__()
最后一个yield也不能用send() 6、生成器的好处
节约内存
''' #关于__next__()方法和send()方法的例子
def func():
a = 1
a2 = yield 2
print(a2)
c = 3
c2 = yield 4
print(c2)
yield 5
gen = func() #生成一个生成器
gen.__next__() #执行到了第一个yield
gen.send('test') #把参数传递到第一个yield
gen.send('娃哈哈') #把参数传递到第2个yield #生成器的好处-节约内存的例子
#一次性买100件衣服,需要地方保存,比较浪费内存
li1 = []
def func2():
for i in range(1,11):
li1.append('衣服 %s' % i)
return li1
ret = func2()
print(ret) #100件衣服一次性生成出来,放到列表到了
print('----------1') #最好的方式是下一个100件衣服的订单,但是呢,需要一件,送一件,就不需要专门的地方保存了,节约内存
#方法1 生成器函数
def func3():
for i in range(1,11):
yield ('衣服 %s' %i)
gen = func3() #生成一个生成器
print(gen.__next__()) #第一件
print(gen.__next__()) #第二件
for i in gen: #生成器本质是迭代器,支持for循环
print(i) #方法2 生成器表达式
# gen = (i for i in range(1,11))
# print(gen) #生成一个生成器(类比:就是买衣服订单)
# print(gen.__next__()) #第一件
# print(gen.__next__()) #第二件
# for i in gen: #生成器本质是迭代器,支持for循环
# print(i) 二、推导式
推导式(列表推导式,字典推导式等)
1、列表推导式:[结果 for循环 if条件]
2、字典推导式:{key: value for循环 if条件}
3、集合推导式:{key for循环 if条件}
注意:没有元组推导式 三、生成器表达式
1、生成器表达式:(结果 for循环 if条件)
2、惰性机制(类比:弹夹没子弹了,不能将同一个值,生成2次)
生成器是记录在内存中的一段代码,产生的时候,没有执行 生成器表达式和列表推导式的区别类比:
1、买100个鸡蛋,列表推导式:是一次性把100个鸡蛋买回来,需要地方存储
2、 生成器表达式:是买一只母鸡,需要鸡蛋就给下蛋

Python【day 12】生成器和推导式的更多相关文章

  1. python note 12 生成器、推导式

    1.生成器函数 # 函数中如果有yield 这个函数就是生成器函数. 生成器函数() 获取的是生成器. 这个时候不执行函数# yield: 相当于return 可以返回数据. 但是yield不会彻底中 ...

  2. 『Python基础-12』各种推导式(列表推导式、字典推导式、集合推导式)

    # 『Python基础-12』各种推导式(列表推导式.字典推导式.集合推导式) 推导式comprehensions(又称解析式),是Python的一种独有特性.推导式是可以从一个数据序列构建另一个新的 ...

  3. 12生成器,send,推导式

    # 1.生成器的本质就是迭代器 # 2.通过函数变成一个生成器 # def func(): # print(1) # yield 5 # 我的函数走到这了 # print(2) # yield 9 # ...

  4. python day 13 生成器 以及 推导式

    1.生成器的本质是迭代器 2.生成器函数 def  fn() 函数体 yield fn() g = fn() 此时这个g就是生成器 所以g 是可迭代的 g._ _next_ _ 每执行一次_ _nex ...

  5. 十二. Python基础(12)--生成器

    十二. Python基础(12)--生成器 1 ● 可迭代对象(iterable) An object capable of returning its members one at a time. ...

  6. python学习笔记:第12天 列表推导式和生成器

    目录 1. 迭代器 2. 推导式 1. 迭代器 什么是生成器呢,其实生成器的本质就是迭代器:在python中有3中方式来获取生成器(这里主要介绍前面2种) 通过生成器函数获取 通过各种推导式来实现生成 ...

  7. Python生成器、推导式之前襟后裾

    生成器 函数体内有yield选项的就是生成器,生成器的本质是迭代器,由于函数结构和生成器结构类似,可以通过调用来判断是函数还是生成器,如下: def fun(): yield "我是生成器& ...

  8. python全栈开发 生成器 :生成器函数,推导式及生成器表达式

    python 全栈开发 1.生成器函数 2.推导式 3.生成器表达式 一.生成器函数 1.生成器: 生成器的本质就是迭代器 (1)生成器的特点和迭代器一样.取值方式和迭代器一样(__next__(), ...

  9. python基础学习笔记——生成器与推导式

    生成器 首先我们来看看什么是个生成器,生成器本质就是迭代器 在python中有三种方式来获取生成器 1.通过生成器函数 2.通过各种推到式来实现生成器 3.通过数据的转换也可以获取生成器 首先,我们先 ...

随机推荐

  1. Windows10下安装解压版MySQL教程

    MySQL安装分为安装版和解压版,安装版主要是由一个exe程序式安装,有界面鼠标点击安装即可,小白建议使用安装版安装mysql,相比较与安装版,解压版安装更"纯净",没有多余的东西 ...

  2. Linux中IP配置

    一.获取网卡名称 ip a ifconfig(安装net-tools后可用) 二.进入网卡配置文件所在路径 cd /etc/sysconfig/network-scripts/ 三.编辑网卡配置文件 ...

  3. cin.get()解密

    最近在使用cin.get()函数时遇到了一个迷惑行为,现已解开. 一.cin.get()的用法 char ch; ch = cin.get(); //第1种用法 cin.get(ch); //第2种用 ...

  4. 一次shell脚本小事故,从中学习排错过程-软件测试

    一次shell脚本小事故,从中学习排错过程 事出,童鞋使用shell脚本搭建测试环境的过称中..... 配置环境变量文件:/etc/profile(用于升级JDK或其他) 手动编辑方法:vi /etc ...

  5. AWVS破解安装

    参考大佬@pirogue的安装步骤及awvs安装包,@pandahks的安装依赖,在本地虚拟机安装awvs,艰辛历程记录如下. 虚拟机操作系统:CentOS Linux release 7.7.190 ...

  6. day53_9_17 django数据库表关联,路由和视图

    一.数据库的关系建立. 在原生的数据库语句中,建立表与表之间的联系,就是添加一个字段,将联系的表的id值添加到该字段中. django所作的也就是这些. 以图书管理系统为例,图书管理系统有四张表:书籍 ...

  7. C++ 模板特化、偏特化测试程序

    #include <iostream> // 偏特化的模板不会自己添加构造函数 ctor 和 析构函数 dtor #if 1 // P1 template <typename T1, ...

  8. MySQL实战45讲学习笔记:第四十三讲

    一.本节概述 我经常被问到这样一个问题:分区表有什么问题,为什么公司规范不让使用分区表呢?今天,我们就来聊聊分区表的使用行为,然后再一起回答这个问题. 二.分区表是什么? 为了说明分区表的组织形式,我 ...

  9. orchard 中文文档 中英对照版

    ORCHARD CMS a free, open source, community-focused Content Management System built on the ASP.NET MV ...

  10. js将内容复制到剪贴板

    有一需求,点击按钮要将某个值复制到剪贴板. 第一种,代码如下: <div cols="20" id="biao1">12345678</div ...