python3--生成器
2019-05-21 14:56
176 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/mh_dream/article/details/90374020
生成器
- 包含yield语句。函数使用yield而不是return返回结果。yield一次生成一个值后,函数停止执行,处于挂起状态,被重新激活后,从停止处继续执行。
- 本质是迭代器,实现了迭代器的功能。
- 优点:不会一次性在内存中生成太多数据,根据需要生成。
- 获取生成值的方法:__next__()或者send(参数),但是send(参数)不能用在首次获取生成值的时候。
- yield from 等价 for 循环 yield
[code]def gen1(): x = 1 yield x print('***' ,x) y = 2 yield y print('*****' ,y) ge1 = gen1() print(ge1.__next__()) # 1 print(ge1.send('')) # *** 1 此处send(参数)作用与__next__()一致 # 2 def gen2(): x = 1 con1 = yield x print('***' ,con1) y = 2 yield y ge2 = gen2() print(ge2.__next__()) # 1 print(ge2.send('hi')) # *** hi 此处send(参数)的作用是在获取下一个yield值的时候,给上一个yield处的变量传递一个值 # 2 # yield from <==> for 循环 yield def gen3(): yield from 'abc' print(list(gen3())) # ['a', 'b', 'c'] def gen4(): for i in 'abc': yield i print(list(gen4())) # ['a', 'b', 'c']
列表推导式与生成器表达式
- 列表推导式[],生成器表达式()
[code]# 列表推导式与生成器表达式 lis = [i for i in range(10)] # 列表推导式 gen = (i for i in range(10)) # 生成器表达式,gen是个生成器表达式类型的生成器 print(lis) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] print(next(gen)) # 0
- 生成器表达式几乎不占内存,在数据量大的时候不会导致服务器卡死
相关文章推荐
- Python生成器generator之next和send的运行流程(详解)
- Python 生成器
- python生成器
- python基础之协程函数、列表表达式、生成器表达式
- Python基础-列表生成式和生成器表达式
- 20181009python生成器/yield协程/gevent写简单的下载器
- python基础之迭代器和生成器
- python推导式,迭代器,生成器以及模块和包
- Python3 学习笔记17_高级特性(生成器)_20180307
- python中的迭代器与生成器
- python 生成器从放弃到玩转
- 提高你的Python: 解释‘yield’和‘Generators(生成器)
- python中的列表推导与生成器
- python ‘yield’和‘Generators(生成器)’
- Python练习笔记——采用生成器函数实现两数之间的偶数计算
- python学习之路4------列表生成器
- python 生成器函数
- python版恶俗古风自动生成器.py
- [python]生成器
- Python yield 生成器