简介
在学习过程中学到了有关于迭代 (Iteration) 、迭代对象 (Iterable)、迭代器(Iterator) 的知识,所以略做总结。
一、迭代
迭代:可以被for循环的对象
#举个栗子
for x in [1,2,3,4,5]:
print(x)
二、迭代对象
1. Iterable包含的数据类型
Iterable主要包含集合数据类型和generator数据类型,即可以用于for循环或者Next()函数的对象都是Iterator,他们表示一个惰性计算序列。
# 惰性计算(Lazy Evaluation),又称懒惰计算、懒汉计算,是一个计算机编程中的一个概念,它的目的是要最小化计算机要做的工作。
1) 集合数据类型: List、turple、dict、set、str
- List:
# 定义一个简单的list
L=[1,2,3,4,5,6,7]
- Turple:
#定义一个简单的Turple
T=(1,2,3,4,5,6)
- Dict
#定义一个简单的Dict
D={"first":"晚来天欲雪","Second":"能饮一杯无?"}
- Set
#定义一个简单的set
S=set([1,2,3])
2) generator数据类型: 生成器和带yield的generator function
- 生成器
#定义一个简单的生成器
#生成器和list不同之处在于
#1. list=[1,2,.....] 生成器是G=(1,2,3,....)
#2. List=[这里的数是有限的] G=(只定义取数的规则,如果定义出的数是无限的话,用Next()能一直取到无限)
G=(x*x for x in range(10))
- 生成器函数
# 这里,最难理解的就是generator和函数的执行流程不一样。函数是顺序执行,遇到return
语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()
的时候执行,遇到yield
语句返回,再次执行时从上次返回的yield
语句处继续执行。
#定义一个简单的生成器函数
def g():
print('step 1')
yield 1
print('step 2')
yield(3)
print('step 3')
yield(5)
# g.next() -> 1
# g.next() -> 3
# g.next() -> 5
2.判断对象是否为Iterable对象
可用使用 isinstance() 判断对象是否为Iterable
from collections import Iterable
print(isinstance([],Iterable))
# 返回True则为 Iterable对象
# 返回False则不是Iterable 对象
三、迭代器 (Iterator)
1. Iterator数据对象
凡是可作用于Next()函数的对象都是Iterator类型,它们表示一个惰性计算序列。
由此可以知道生成器和生成器函数都是迭代器
在python中Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误。
集合数据类型如list
、dict
、str
等是Iterable
但不是Iterator
,但是这些Iterable对象可以通过iter()
函数获得一个Iterator
对象。
#使用iter将list转化为List_Iterator对象
L=[1,2,3,4,5]
Il=iter(L)
2. 判断对象是不是Iterator对象
可以使用isinstance()
判断一个对象是否是Iterator
对象
from collections import Iterator
L=[1,2,3,4,5]
Il=iter(L)
# 如果是Iterator对象则返回True 反之则返回false
print(isinstance(Il,Iterator))
3. 特殊的Iterator对象
Map、Reduce、Filter这些高级函数返回的对象也是Iterator对象