python生成器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python生成器相关的知识,希望对你有一定的参考价值。

generator

1.生成器函数:

       函数中有yield的就是生成器函数,执行生成器函数得到一个生成器,生成器具备生成某些东西的能力

       yield具有返回值,退出函数体,保留进度的功能,下次调用__next__功能继续从当前位置开始执行

2.生成器:

       生成器函数的产物

3.生成器的意义:

       python2.7中的xrange就是一个生成器函数,但是在3.6中已经被移除

1 #!/usr/bin env python
2 # -*- coding:utf-8 -*-
3 # python 2.7
4 print(range(10))
5 print(xrange(10))
6 ‘‘‘
7 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
8 xrange(10)
9 ‘‘‘

    其意义在于:range(10)会在内存中一次性生成10个元素,而xrange(10)却得到一个生成器,在需要用的时候再生成某个元素,节约内存

4.在python3中用生成器实现xrange函数

 1 def xrange(n):
 2     print(start)
 3     start = 0
 4     while start < n:
 5         yield start
 6         start += 1
 7  
 8 obj = xrange(5)
 9 n1 = obj.__next__()
10 n2 = obj.__next__()
11 n3 = obj.__next__()
12 n4 = obj.__next__()
13 n5 = obj.__next__()
14 n6 = obj.__next__()
15 #n7 = obj.__next__()
16 print(n1, n2, n3, n4, n5, n6)

5.生成器执行流程

技术分享

6、yelid与__next__

1 # next每遇到一次yield将执行yield以上的程序,
2 # 然后yield后面的值返回,并记录程序运行的位置
3 # 等待下一次的__next__和下一次的yield
4 # yield的作用保存上次执行的状态

 

 


 

以上是关于python生成器的主要内容,如果未能解决你的问题,请参考以下文章

postman 自动生成 curl 代码片段

Apollo Codegen 没有找到生成代码的操作或片段

前端开发工具vscode如何快速生成代码片段

前端开发工具vscode如何快速生成代码片段

vscode代码片段生成vue模板

常用python日期日志获取内容循环的代码片段