Python3基础笔记--生成器
2024-08-31 13:15:10
目录:
一、列表生成器
二、生成器
三、迭代器
一、列表生成器
a = [x for x in range(10)] b= [y*2 for y in range(10)] def f(n)
return n*n*n c = [f(z) for z in range(10)]
列表生成器会将所有的内容加载到内存中,在生成大量的数据时,会占用内存
生成器只会生成一个 generator object ,占用很少内存,只会在调用时才产生值。且只能按顺序取值
二、生成器
1、基础代码
b = (x for x in range(10))
print(b) print(next(b)) # 等价于 b.__next__() 等价于python2中的b.next()
print(b.__next__()) for i in b:
print(i) '''output
<generator object <genexpr> at 0x000002900B1BB308>
0
1
2
3
4
5
6
7
8
9
'''
2、两种生成方式
① (x for x in range(10))
② yield方式
第②种代码
def foo():
print("ok")
yield 1 print("fine")
yield g = foo()
print(g) # next(g)
# aa = next(g)
# print(aa) for i in g:
print(i)
遇到函数中有 yield 则该函数为生成器
一个yield是一个生成器的生成物的结点,它会返回yield 后面的内容,然后结束,直到下一个next的调用
3、send()方法
def bar():
c = yield 0
print(c)
print("ok1")
count = yield 1 print(count)
print("ok2")
yield 2 g = bar()
print(g) # print(next(g))
print(g.send('ccc')) # TypeError: can't send non-None value to a just-started generator print(g.send("qqqq"))
send()方法与next()方法类似,但可以向生成器中传值,用于一些交互场景,但在第一个send()前如果没有next(),只能传一个send(None),否则会出现 TypeError: can't send non-None value to a just-started generator
三、迭代器
参考博客:Python之路,Day4 - Python基础4 (new版)
什么是迭代器?
满足两个条件:①有iter方法 ②有next方法
区别迭代器与可迭代对象
from collections import Iterator,Iterable l = [1, 2, 3] print(isinstance(l,list))
print(isinstance(l,Iterator)) # False 不是迭代器
print(isinstance(l,Iterable)) # True 是可迭代对象 for i in l:
print(i)
最新文章
- Android开发案例 - 注册登录
- Deep learning:四十六(DropConnect简单理解)
- C#winform中使用控件的Dock属性进行布局
- mysql如何给汉字按照首字母顺序排序
- js时间字符串转Date对象
- crtmpserver组网方案
- 利用朴素贝叶斯算法进行分类-Java代码实现
- 克隆虚拟机系统整个文件快照,然后另起建立该系统,产生的IP地址冲突解决办法
- Java自学能学会吗?最新Java高级学习路线
- 详解EBS接口开发之应收款处理
- 2019年最受欢迎IMX6系列开发板,资料全开源,助力产品研发不在话下
- pt-table-checksum 使用方法【转】
- windows server 2008 R2安装图片浏览器/照片查看器方法
- [No000012A]WPF(2/7):布局,容器和布局转换[译]
- Spark学习之路 (七)Spark 运行流程
- learning ddr init power-up initialization sequence
- Redis-4.0.11集群配置
- Spring 4 官方文档学习(十)数据访问之JDBC
- 学号20145322 《Java程序设计》第一周学习总结
- 二十六、关于 IntelliJ IDEA 中 Schedule for Addition 的问题
热门文章
- C++ 虚函数的缺省參数问题
- [JZOJ NOIP2018模拟10.20 A组]
- Android setImageResource与setImageBitmap的区别
- 3ds Max实例教程:制作雪的材质
- 洛谷P2617 Dynamic Rankings 主席树 单点修改 区间查询第 K 大
- Hadoop2.x 关于日志文件位置
- 关于vue事件监听的一个问题
- #undef 的用法
- 普通码农和CTO之间的差距
- How to enable wire logging for a java HttpURLConnection traffic?