乱读天书, 不求甚解
周祎骏的个人云笔记
Toggle navigation
乱读天书, 不求甚解
主页
Linux:系统配置
Linux:用户管理
Linux:优化排错
Linux:进程调度
Linux:文件系统
Linux:网络
Linux:系统服务
Linux:安全
Linux:内核
容器:Docker
容器:containerd
容器编排:Kubernetes
IAC:Terraform
大数据:Hadoop
大数据:Zookeeper
大数据:Hbase
消息队列:rsyslog
消息队列:kafka
数据库:MySQL
数据库:MongoDB
搜索引擎:Elasticsearch
时序数据库:OpenTSDB
网站服务:Nginx
编程:Bash
编程:Perl
编程:Python
编程:C
编程:JAVA
编程:Rust
版本控制:gitlab
知识管理:docusaurus
常用小工具
关于我
标签
python 2.04 迭代器和生成器
2017-02-18 09:45:31
62
0
0
admin
> 迭代器就是支持next()的对象,生成器是可以一种用普通函数定义的迭代器。两者都适合用于列表过大的时候动态生成列表的新元素(大列表占内存)。 #迭代器 **注:** 迭代器的xx.next() 到python3 变成了next(xx); xx是迭代对象。 ``` #!/usr/bin/python class get_num: def __init__(self): #生成对象必须的 self.a = 0 def next(self): #可迭代对象必须实现的方法,在python3改成了__next__ 方法 self.a = self.a + 1 if self.a > 10: raise StopIteration() #遍历完以后应该报这个异常 return self.a def __iter__(self): #返回迭代器本身,可以被for 使用,有了这个方法才叫迭代器 return self a = get_num() print a.next() for i in a: print i ``` *** #生成器 生成器表面上是普通的函数,其实yield与return不同,调用yield的时候,会返回一个值,然后将生成器挂起,直到下一次调用再返回下一个值。 **code:** ``` #!/usr/bin/python #简单的使用生成器 def get_num(): for num in [1,2,3,4,5]: yield num for i in get_num(): print i #生成器的send,close方法 def get_num_2(a): for num in [1,2,3,4,5]: result=(yield str(num)+a) # result 会被赋值a print ">>",result if result != None: a=result generator = get_num_2("abc") print generator.next() #等同于send(None) print generator.send(None) print generator.send("def") #"def" 会被赋值给a generator.close() ``` **运行结果** ``` [root@hadoop1 python]# ./yield.py 1 2 3 4 5 1abc >> None 2abc >> def 3def ```
上一篇:
python 2.03 面向对象
下一篇:
python 3.00 模块
文档导航