Python【day 12】生成器和推导式
一、生成器和生成器函数
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】生成器和推导式的更多相关文章
- python note 12 生成器、推导式
1.生成器函数 # 函数中如果有yield 这个函数就是生成器函数. 生成器函数() 获取的是生成器. 这个时候不执行函数# yield: 相当于return 可以返回数据. 但是yield不会彻底中 ...
- 『Python基础-12』各种推导式(列表推导式、字典推导式、集合推导式)
# 『Python基础-12』各种推导式(列表推导式.字典推导式.集合推导式) 推导式comprehensions(又称解析式),是Python的一种独有特性.推导式是可以从一个数据序列构建另一个新的 ...
- 12生成器,send,推导式
# 1.生成器的本质就是迭代器 # 2.通过函数变成一个生成器 # def func(): # print(1) # yield 5 # 我的函数走到这了 # print(2) # yield 9 # ...
- python day 13 生成器 以及 推导式
1.生成器的本质是迭代器 2.生成器函数 def fn() 函数体 yield fn() g = fn() 此时这个g就是生成器 所以g 是可迭代的 g._ _next_ _ 每执行一次_ _nex ...
- 十二. Python基础(12)--生成器
十二. Python基础(12)--生成器 1 ● 可迭代对象(iterable) An object capable of returning its members one at a time. ...
- python学习笔记:第12天 列表推导式和生成器
目录 1. 迭代器 2. 推导式 1. 迭代器 什么是生成器呢,其实生成器的本质就是迭代器:在python中有3中方式来获取生成器(这里主要介绍前面2种) 通过生成器函数获取 通过各种推导式来实现生成 ...
- Python生成器、推导式之前襟后裾
生成器 函数体内有yield选项的就是生成器,生成器的本质是迭代器,由于函数结构和生成器结构类似,可以通过调用来判断是函数还是生成器,如下: def fun(): yield "我是生成器& ...
- python全栈开发 生成器 :生成器函数,推导式及生成器表达式
python 全栈开发 1.生成器函数 2.推导式 3.生成器表达式 一.生成器函数 1.生成器: 生成器的本质就是迭代器 (1)生成器的特点和迭代器一样.取值方式和迭代器一样(__next__(), ...
- python基础学习笔记——生成器与推导式
生成器 首先我们来看看什么是个生成器,生成器本质就是迭代器 在python中有三种方式来获取生成器 1.通过生成器函数 2.通过各种推到式来实现生成器 3.通过数据的转换也可以获取生成器 首先,我们先 ...
随机推荐
- SSM框架之Mybatis(4)SqlMapConfig
Mybatis(4)SqlMapConfig.xml SqlMapConfig.xml 中配置的内容和顺序 -properties (属性) --property -settings(全局配置参数) ...
- Tomcat安装、使用(Windows)
一.下载.安装 1.下载 进官网下载 : https://tomcat.apache.org/ 选择自己适合的版本.在这里演示的是下载 Tomcat 7(解压安装版). 2.解压.启动tomcat 解 ...
- 表单_HTML
HTML表单_输入元素 大多数情况被用到的表单标签是输入标签 输入类型是由类型属性(type)定义的. 表单中的单选按钮可以设置以下几个属性:value.name.checked value:提交数据 ...
- Android框架Volley之:利用Imageloader和NetWorkImageView加载图片
首先我们在项目中导入这个框架: implementation 'com.mcxiaoke.volley:library:1.0.19' 在AndroidManifest文件当中添加网络权限: < ...
- python async
理解 python 的 async:1. 协程后面的技术也是 IO 多路复用, Nginx 和 nodejs 都充分利用了这种机制. 2. Flask 线程中为什么不能直接使用标准库 asyncio ...
- liteos C++支持(十七)
1 概述 1.1 基本概念 C++作为目前使用最广泛的编程语言之一,支持类.封装.重载等特性,是在C语言基础上开发的一种面向对象的编程语言. 1.2 运作机制 STL(Standard Templat ...
- arm-linux-gcc-4.5.1安装方法
写在前面 之前写了一篇arm-linux-gcc-5.4.0的安装方法,但是后来发现5.4.0这个版本可能有些太新了,所以又找了这个4.5.1版本(低版本),由FriendlyARM(友善之臂)提供, ...
- python 将带有TZ的UTC时间字符串,转换成本地时间
整个地球分为二十四时区,每个时区都有自己的本地时间.在国际无线电通信中,为统一而普遍使用一个标准时间,称为通用协调时(UTC, Universal Time Coordinated).UTC与格林尼治 ...
- 一次shell脚本小事故,从中学习排错过程-软件测试
一次shell脚本小事故,从中学习排错过程 事出,童鞋使用shell脚本搭建测试环境的过称中..... 配置环境变量文件:/etc/profile(用于升级JDK或其他) 手动编辑方法:vi /etc ...
- 【洛谷P4148】简单题(kd-tree)
传送门 题意: 给出一个\(n*n\)的棋盘,现在有两种操作:一种是某个格子里的数字加上\(A\),另一种是询问矩阵和. 空间限制:\(20MB\),强制在线. 思路: 直接\(kd-tree\)来搞 ...