Python 中的yield 以及 generator
来源:互联网 发布:微商销售网站源码 编辑:程序博客网 时间:2024/04/29 21:22
python 中的yield 以及generator
本篇文章浅谈python中的yield以及generator。很早就接触到了python生成器,当时在使用python2.7研究range 和xrange的区别,了解到xrange是一个生成器,而在python3中range直接就是生成器。就拿range与xrange比较得知,range产生一个列表,并且列表中的数据全部放置于内存中,如果我们要访问一个无限长列表中的某一个符合条件的数据时(比如斐波那契序列中的某一个数据),range的序列会存储在内存中,现在不可能采用这种方式,此时xrange就起作用了,xrange会存储当前访问数据的下一个数据地址,每一次访问的时候返回一个数据,不会将所有的数据压如内存,因此可以解决访问无限长数据的问题。而要构建一个生成器就必须使用yield。yield的功能类似于return,区别在于函数中有return 每一次调用该函数从函数头部运行到return位置返回return对应的值,return后内容不再运行,只要参数一样,无论调用多少次返回结果一样。而yield就不同了,可以将yield理解为等待调用(因为在多线程中yield功能是等待线程结束)。每一次调用含有yield的函数(即是generator)返回当前yield后面的值,然后yield后面内容继续运行。如果要保证生成器多次调用有效,那么yield一般放在循环里面,保证生成器每次执行完调用后会再次循环到yield位置等待调用。废话不多说,上代码:
实例一:最简单的yield
def gen1(n): print('generator runs') res = 0 i = 0 while i<n: yield i i = i+1if __name__ == '__main__': for item in gen1(10): print(item)
输出从0-(N-1)的数据
输出结果:
实例二:生成器产生斐波那契序列
输出前N个斐波那契序列中的数据代码如下:
def gen2(n): i = 0 rpre = 1 pre = 1 cur = 0 while i<n: if i<2: yield 1 else: cur = rpre + pre yield cur rpre = pre pre = cur i = i+1if __name__ == '__main__': for item in gen2(20): print(item)
生成前20个斐波那契序列数据:
阅读全文
0 0
- Python 中的yield 以及 generator
- python中的生成器 generator yield
- python generator / yield statement
- Python yield expression (generator)
- python中yield generator
- python iterator generator yield
- Python yield and generator
- python yield和generator
- python yield generator
- python yield generator 详解
- python yield generator 详解
- python yield generator 详解
- python yield generator 详解
- Python Yield Generator 详解
- evenlet引发的学习-python 'yield'以及'generator'
- 说说Python中的iterator,yield表达式及generator,coroutine
- python 关于yield, generator, iterable
- python的yield和generator
- mysql 数据库用户远程访问解决方案
- ConcurrentHashMap小记
- 栈的自实现
- 统计一个数字的位数并顺序和逆序输出这个数
- mybatis 模糊查询
- Python 中的yield 以及 generator
- install python 3.5.2
- Android 单独的一个购物车
- c# 数据保存为excel .csv
- 写一个简易浏览器、ASP.NET核心知识(3)
- [JavaScript--代码98]:JS代码重构
- js按ctrl+enter换行,让可编辑的div换行,并获取输入焦点光标
- mysql语法
- nginx详解之配置虚拟主机