python中的生成器
2024-09-03 04:00:18
什么是生成器?
生成器是一个包含了特殊关键字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---
最新文章
- AC日记——二叉堆练习3 codevs 3110
- python os模块(1)
- 20150207读书笔记<;深入理解计算机系统2-1>;
- 小白学习mysql之存储过程的优劣分析以及接入控制
- jQuery.stickUp插件重构
- EF LEFT JON 关联查找
- mysql_自动备份
- JDK1.8源码阅读系列之一:ArrayList
- Linode VPS上架日本东京2号机房,性能速度评测报告(推荐)
- chrome下如何显示打开网页的IP地址
- ubuntu-16.04(linux)使用Reaver爆破wifi密码(路由器的WPS功能漏洞)
- JavaScript中的string对象及方法
- 初识DJango——Web框架
- c# Nlog 非xml cs方法配置
- 警示:AL32UTF8字符集不是ZHS16GBK字符集的超集
- Alpha阶段报告-hywteam
- B4 and After: Managing Hierarchy, Partitioning, and Asymmetry for Availability and Scale in Google’s Sofware-Defined WAN
- Spark:实现行转列
- Python语言知识总结
- 什么是 Azure 中的虚拟机规模集?
热门文章
- NETMON&; Message Analyzer
- PHP使用libevent实现高性能httpServer
- 输入的不是有效的 Base-64 字符串,因为它包含非 Base-64 字符、两个以上的填充字符,或者填充字符间包含非法字符
- jQuery的图像裁剪插件Jcrop
- 【转】第4篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:委托回调方法分析
- spring基于注解的配置文件
- TKinter之输入框
- MySQL中Group By,distinct使用注意事项
- SQL SERVER 拆分列为多行
- Mysqldump参数大全(转)