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.通过数据的转换也可以获取生成器 首先,我们先 ...
随机推荐
- Android Studio当中的创建新方法的快捷键该如何使用?
当有红线出现的时候,我们的代码并没有编译出错,则需要输入alt+enter则可以得到相应的神奇效果了.这个方法我竟然今天才知道,也真是丢脸了.比如说我们书写了一个新的没有创建的方法,我们直接输入alt ...
- STC15控制数码管 38译码器
共阳极数码管举例 #define MAIN_Fosc 27000000L //定义主时钟 #include "STC15Fxxxx.H" #define uchar unsigne ...
- 剑指offer 12:二进制中1的个数
题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 解法一:设置标志为flag=1,逐个位移至不同位置,比较是否为1. C++实现 class Solution { publi ...
- [b0024] python 归纳 (十)_线程 _Thread模块
#!/usr/bin/pythonn # -*- coding: UTF-8 -*- """ 学习线程 thread 总结: 1. 主线程退出,所有子线程都退出 2. ...
- vscode使用formate格式化less遇到的坑
就是这个家伙 我的代码 @input-padding-y : 8px;@input-padding-x : 12px; @input-padding-y-lg : @input-padding-y + ...
- mysql 实现全连接
mysql不支持全连接,但可以通过左外连接+ union+右外连接实现 SELECT * FROM t1 LEFT JOIN t2 ON t1.id = t2.id UNION SELECT * FR ...
- C学习笔记(1)---数据类型,变量,储存类
1.常用基本数据类型占用空间(64位机器为例): char : 1个字节 -- int :4个字节 -- float:4个字节 -- double:8个字节 2.书写类型: A.整数: a. 默认为1 ...
- win10连接共享打印机
一.在运行中输入“\\共享打印机的主机ip”. 二.如果出现下面弹窗: 1.按Win键弹出开始菜单,直接在键盘上按zucelue,这个时候开始菜单里会检索到“编辑组策略”这个程序,按回车运行该程序.2 ...
- RSTP基本配置
1.用四台S3700交换机,2台PC机,一台HUB,组建网络拓扑 2.测试主机间的连通性 3.配置rstp基本功能 (1)把交换机stp模式由默认的mstp变为rstp.在华为交换机上默认开启了mst ...
- java中的字符串一
public class TestString2 { public static void main(String[] args) { //判断两字符串是否相等 String s1 = "H ...