python 迭代器和解析
来源:互联网 发布:女朋友 文艺青年 知乎 编辑:程序博客网 时间:2024/06/03 22:40
1.概念区分
首先区分一下容器(container)、可迭代对象(iterable)、迭代器(iterator)、生成器(generator)这些概念。
容器(container)
把多个元素组织在一起的数据结构,元素可以逐个迭代的获取,通过in,not in 关键字判断元素是否在容器中。
常见的容器对象有:
· list,deque
· set,frozensets
· dict,ordereddict,counter
· tuple,namedtuple
· string
迭代器(iterator)
迭代器,内部持有一个状态,记录了当前迭代所在位置,在调用next()方法时返回容器中下一个元素。
任何实现了__iter_()和__next__()方法的对象都是迭代器。__iter__返回迭代器自身,__next__返回下一个元素
可迭代对象(iterable)
很多容器都是可迭代对象,例如list,set,dict等,此外打开状态的files,sockets也是可迭代对象。
可迭代对象实现了__iter__()方法,该方法返回一个迭代器
x = [1,2,3]y = iter(x)next(y)>1next(y)>2type(x)><class 'list'>type(y)><class 'list_iterator'>
如下图,这个例子中x是一个可迭代对象,y是一个迭代器
生成器
是一种特殊的迭代器,效果是延迟创建值。
有两种类型的生成器:
1) 含yeild关键字的函数
特点:没有返回值,使用yeild关键字
例如,生成斐波那契数列
def fib(n): prev, cur = 0,1 while True: yeild cur prev, cur = cur, prev + cur
2)生成器表达式
z=(i+1 for i in range(5)) z <generator object <genexpr> at 0x0000000003596A20>
生成器使用常见场景:
#使用返回值的写法def fun(x): result = [] for ... in x: result.append(...) return result#生成器的写法def fun2(x): for ... in x: yeild ...
2、总结
· 容器是一系列元素的集合,容器都可以被迭代(用在for,while等语句中),因此他们被称为可迭代对象。
· 可迭代对象实现了__iter__方法,该方法返回一个迭代器对象。
· 迭代器持有一个内部状态的字段,记录下次迭代返回值,迭代器不会一次性把所有元素加载到内存,而是需要的时候才生成返回结果。
· 生成器是一种特殊的迭代器,它的返回值不是通过return而是用yield。
参考博客:http://python.jobbole.com/87805/
- python 迭代器和解析
- python:迭代器和列表解析
- Python笔记(五)迭代器和解析
- Python——迭代器和解析(1)
- Python——迭代器和解析(2)
- Python——迭代器和解析(3)
- python 构建和解析邮件
- python生成和解析二维码
- python 错误和异常解析
- Python抓取和解析网页
- python创建和解析XML
- Python列表解析和生成器
- python学习手册笔记--第14.20章--迭代器和解析
- 迭代器和解析——Python(学习笔记)
- Python 列表解析和生成器表达式
- 利用Python抓取和解析网页(下)
- 利用Python抓取和解析网页(1)
- 利用Python抓取和解析网页(2)
- MySQL 表结构查看以及表结构修改
- 提高博客浏览量
- 51Nod—1717 好数(思维)
- ie故障重置脚本:网络协议/主机文件/IE设置/Winsock
- 生成函数
- python 迭代器和解析
- C++用控制器函数实现格式化I/O范例
- 提高客户管理系统应用价值的五种方法
- 最小点权覆盖集&最大点权独立集
- poj2965 The Pilots Brothers' refrigerator 枚举 暴力 递归
- KNN分类算法java实现
- Equivalent Strings
- 写一个ButterKnife
- 使用控制台执行MySQL命令时,出现1366错误的原因与解决方案