1 生成器函数的含义

    生成器是一个返回可以迭代对象的函数,它是一个特殊的迭代器,但迭代器的抽象层级更高且比较复杂需要实现很多方法。相较迭代器而言,生成器简单使用。

2 生成器的创建方式

  2.1 生成器表达式

    把列表推导式的[] 修改为(),如

(i for i in range(1, 10000) if i % 2 == 0)

  代码执行界面如下:

    

  2.2 生成器函数

    (1)在一个一般函数中使用yield关键字,可以实现一个最简单的生成器,此时这个函数变成一个生成器函数。简单来说,生成器函数就是函数

    中包含 yield语句的函数。

        yield语法:yield [返回值]     ([] 表示可选参数)。

        yield的作用:yield可以去阻断当前的函数执行。当使用next()(或.__next__())函数,会让函数继续执行,yield后面的值作为next()函数

      返回值,当执行到下一个 yeild时,又会被暂停挂起。

        yield与return的区别:yield会保存当前函数的执行状态,在返回后,函数又回到之前保存的状态继续执行;而return返回后,函数

      状态终止。
    (2)代码实例

 def mylist():
for i in range(3):
print("列表的第%s个元素:" % i, end="")
yield i ml = mylist() # 创建一个生成器
print(next(ml))
print(next(ml))
print(next(ml))
print(next(ml)) # 当生成器遍历完后,再遍历就会报错

     代码执行顺序示意图:

      

3 生成器的遍历

  3.1 next()或.__next__()遍历,代码如下 

  

 # 方式1
ml = (i for i in range(1, 10) if i % 2 == 0)
print("next()方式遍历结果:", end="")
print(ml.__next__(), end=" ,")
print(ml.__next__(), end=" ,")
print(ml.__next__(), end=" ,")
print(ml.__next__()) # 方式2
ml2 = (i for i in range(1, 10) if i % 2 == 0)
print(".__next__()方式遍历结果:", end="")
print(next(ml2), end=" ,") # next()相当于 生成器.__next__()
print(next(ml2), end=" ,")
print(next(ml2), end=" ,")
print(next(ml2))

  上面代码执行结果如下:
  

  3.2 for in方式遍历,代码如下,

 ml = (i for i in range(1, 10) if i % 2 == 0)
print("for in 遍历结果为;", end=" ")
for i in ml:
print(i, end=", ")

  上面代码执行结果为:

    


4 关闭生成器
  命令:生成器名称.close()  ,例如 ml.close()。

  注意:生成器只会遍历一次,当关闭生成器或者遍历一遍后,后续如果再调用,会抛出StopIteration异常提示。下次如果想继续重新遍历,必须先重新创建生成器。

最新文章

  1. VB6与VB.NET对照表
  2. android第一行代码-1.项目结构
  3. oracle从零开始学习笔记 三
  4. jenkins环境搭建
  5. Mysql命令大全&&指定端口登录
  6. WinForm中当TextBox重新获得焦点时输入法失效问题
  7. javascript调用oc的方法
  8. UCS-2和UTF8的四个新知识点和新的疑问
  9. channel c3 disabled, job failed on it will be run on another channel
  10. Scala基础入门-1
  11. bootstrap注意事项(四)表格
  12. 实战 ASP.NET MVC Web API
  13. hdu_5104 Primes Problem()
  14. 最详细的div边距合并的问题和解决方法
  15. 值得一看的35个Redis常用问题总结
  16. LOJ #6539 奇妙数论题
  17. K8S 安装 Wordpress
  18. 安装Visual Studio 语言包时出现windows 程序兼容模式已打开.请将其关闭
  19. DBS:CUPhone
  20. Pyhton语句

热门文章

  1. [转]【Angular4】基础(六):HTTP模块
  2. asp.net-常用服务器控件-20180329
  3. Java_Queue接口
  4. Android开发过程中的坑及解决方法收录(一)
  5. Java 中变量初始化、子类和父类构造器调用的顺序
  6. 7个拒绝使用TypeScript的借口
  7. EJS-初识
  8. K8S flannel
  9. Vue2+VueRouter2+webpack 构建项目实战(四):接通api,渲染列表
  10. CF607B Zuma(区间dp)