什么是生成器?

  生成器是一个包含了特殊关键字yield的函数。当被调用的时候,生成器函数返回一个生成器。可以使用send,throw,close方法让生成器和外界交互。

生成器也是迭代器,但是它不仅仅是迭代器,拥有next方法并且行为和迭代器完全相同。所以生成器也可以用于python的循环中,

如何使用?

首先看一个例子:

#!/usr/bin/python
# -*- coding: utf-8 -*-
def flatten(nested):
for sublist in nested:
for element in sublist:
yield element nested = [[1,2],[3,4],[5,6]]
for num in flatten(nested):
print num,

结果为1,2,3,4,5,6

递归生成器:

#!/usr/bin/python
# -*- coding: utf-8 -*- def flatten2(nested):
try:
for sublist in nested:
for element in flatten2(sublist):
yield element
except:
yield nested for num in flatten2([[1,2,3],2,4,[5,[6],7]]):
print num,

结果为:1 2 3 2 4 5 6 7

让我们一起来看看生成器的本质

首先看下:

#!/usr/bin/python
# -*- coding: utf-8 -*-
def simple_generator():
yield 1
print simple_generator def repeater(value):
while True:
new = (yield value)
if new is not None: value = new r = repeater(42)
print r.next() print r.send('hello,world!')

结果为:

<function simple_generator at 0x10c76f6e0>
42
hello,world!

可以看出:

1)生成器就是一函数

2)生成器具有next方法

3)生成器可以使用send 方法和外界交互。

---end---

最新文章

  1. AC日记——二叉堆练习3 codevs 3110
  2. python os模块(1)
  3. 20150207读书笔记&lt;深入理解计算机系统2-1&gt;
  4. 小白学习mysql之存储过程的优劣分析以及接入控制
  5. jQuery.stickUp插件重构
  6. EF LEFT JON 关联查找
  7. mysql_自动备份
  8. JDK1.8源码阅读系列之一:ArrayList
  9. Linode VPS上架日本东京2号机房,性能速度评测报告(推荐)
  10. chrome下如何显示打开网页的IP地址
  11. ubuntu-16.04(linux)使用Reaver爆破wifi密码(路由器的WPS功能漏洞)
  12. JavaScript中的string对象及方法
  13. 初识DJango——Web框架
  14. c# Nlog 非xml cs方法配置
  15. 警示:AL32UTF8字符集不是ZHS16GBK字符集的超集
  16. Alpha阶段报告-hywteam
  17. B4 and After: Managing Hierarchy, Partitioning, and Asymmetry for Availability and Scale in Google’s Sofware-Defined WAN
  18. Spark:实现行转列
  19. Python语言知识总结
  20. 什么是 Azure 中的虚拟机规模集?

热门文章

  1. NETMON&amp; Message Analyzer
  2. PHP使用libevent实现高性能httpServer
  3. 输入的不是有效的 Base-64 字符串,因为它包含非 Base-64 字符、两个以上的填充字符,或者填充字符间包含非法字符
  4. jQuery的图像裁剪插件Jcrop
  5. 【转】第4篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:委托回调方法分析
  6. spring基于注解的配置文件
  7. TKinter之输入框
  8. MySQL中Group By,distinct使用注意事项
  9. SQL SERVER 拆分列为多行
  10. Mysqldump参数大全(转)