<30>python学习笔记——生成器
来源:互联网 发布:淘宝店铺布局分析报告 编辑:程序博客网 时间:2024/05/13 22:55
列表生成式(使用的是中括号)
[ 函数或运算方法 for 元素 in 可迭代对象 ]
列表生成式先将列表准备好,然后依次将元素带入函数或运算方法中进行操作,并依次返回值
所以可以使用列表切片的方式操作数据。如 :c [100]是可以的
示例1:
[i*2 for i in range(10)]Out[3]: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]示例2:
def add(i): i *=10 print(i)resuls = [add(i) for i in range(10)]print(resuls)
生成器(使用的是小括号)
( 函数或运算方法 for 元素 in 可迭代对象)
生成器没法用列表切片的方式取值 如:c [100] 是错误的。
生成器只能记住当前位置,只能用 __next__()方法 获取下一个数据。而且不能返回取之前的数据。
##通过函数做了一个生成器def fib(max): n,a,b = 0,0,1 while n< max: ##要想返回什么,就把 yield 放到那个位置。yield是保存了函数的中断状态,下一次还回到这个位置 yield b ##通过yield 在单线程下可以实现并发效果。 a,b = b,a+b n +=1# print(fib(100))##变成生成器的函数。不需要等待函数全部生成,可以暂时中断函数运行,需要的时候再调用f = fib(100)print(f.__next__())print('----------我是插进来运行的东西--------')print(f.__next__())print('----------我又插进来一下--------')print(f.__next__())print(f.__next__())
用函数实现生成器
还可以通过yield实现在单线程下的情况下实现并发运算的效果
代码1:说明send()对yield的作用
def consumer(name): print('%s 准备吃包子' %name) while True: ##yield保存当前状态, baozi = yield ##走到这就返回,下面的语句不执行 print('包子[%s]被 [%s] 吃了'% (baozi,name))c = consumer('dralon')c.__next__()##取值b1 = '韭菜包子'c.send(b1)##send把b1的值传递进函数,被yield接收到,并赋值给了'baozi'##send 调用yield,同时给yield传值。##__next__只是调用yieldc.__next__()##运行结果:# dralon 准备吃包子# 包子[韭菜包子]被 [dralon] 吃了 (send 调用yield,同时给yield传值。)# 包子[None]被 [dralon] 吃了 (__next__只是调用yield)代码2,实现单线程下并发运算的效果
import timedef consumer(name): print('%s 准备吃包子' %name) while True: ##yield保存当前状态, baozi = yield ##走到这就返回,下面的语句不执行 print('包子[%s]被 [%s] 吃了'% (baozi,name))def producer(name): c1 = consumer('A----') ##c1开始调用consumer函数 c2 = consumer('----B') ##c2开始调用consumer函数 c1.__next__() ##c1取第一次运行,会在yield的位置停下来 c2.__next__()##c1取第一次运行,会在yield的位置停下来 print('我开始做包子啦!') for i in range(3): time.sleep(1) print('做了一个包子,分两半') c1.send(i) ##c1调用yield,并将值传给了yield,所以consumer函数有继续运行下去 c2.send(i) ##c2调用yield,并将值传给了yield,所以consumer函数有继续运行下去producer('dralon')
运行结果:
A---- 准备吃包子----B 准备吃包子我开始做包子啦!做了一个包子,分两半包子[0]被 [A----] 吃了包子[0]被 [----B] 吃了做了一个包子,分两半包子[1]被 [A----] 吃了包子[1]被 [----B] 吃了做了一个包子,分两半包子[2]被 [A----] 吃了包子[2]被 [----B] 吃了
0 0
- <30>python学习笔记——生成器
- 【Python】学习笔记——-4.4、生成器
- Python学习笔记——生成器
- Python学习笔记-生成器
- Python学习笔记--生成器
- python学习笔记 生成器
- Python生成器学习笔记
- python学习笔记--生成器
- Python学习笔记——生成器,yeild语句
- python学习——生成器
- Python学习笔记 - 生成器generator
- python学习笔记--理解生成器
- python 学习笔记6 生成器
- 【Python 学习笔记】各种生成器
- python学习笔记--generator生成器
- python学习笔记-生成器并行
- python学习笔记之生成器
- 【Python学习笔记】python高级特性:生成器
- Android自定义控件波浪线工具类
- Python实例:网络爬虫抓取豆瓣3万本书(1)
- HTTP协议状态码
- oracle常用命令1
- 纯CSS三列布局
- <30>python学习笔记——生成器
- 前端数据可视化工具库
- ORACLE
- PHP:API 接口规范完整版本
- 上周热点回顾(2.27-3.5)
- ES6箭头函数、Class、this、继承。
- js 获取上个月第一天和最后一天
- 项目里面常用的加密方式base64 AES MD5 sha1
- 线程类Thread的API接口分析系列之定时器Timer