#判断是否为可迭代(Iterable)对象:
isinstance(***, Iterable)
#判断是否为迭代器(Iterator)对象:
isinstance(***, Iterator)
1. 什么是迭代?
迭代是访问集合元素的一种方式。
可迭代对象有哪些?
==> 可以直接作用于 for 循环的数据类型:
- 一类是集合数据类型,如 list 、 tuple 、 dict 、 set 、 str 等;
- 一类是 generator ,包括生成器和带 yield 的generator function。
==> 这些可以直接作用于 for 循环的对象统称为可迭代对象: Iterable 。
2. 什么是迭代器(iterator)?
- 迭代器是一个可以记住遍历的位置的对象。
- 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。
- 迭代器只能往前不会后退。
- 可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。
迭代器有哪些?
- 生成器都是 Iterator 对象。
- 生成器不但可以作用于 for 循环,还可以被 next() 函数不断调用并返回下一个值,直到最后抛出 StopIteration 错误表示无法继续返回下一个值了。
- 但是,除了生成器,其他 list 、 dict 、 str 虽然是 Iterable ,却都不是 Iterator
(i for i in range(7))是一个生成器对象
#<generator object <genexpr> at 0x7f7e471ed550>
[i for i in range(7)]是一个列表
#[0, 1, 2, 3, 4, 5, 6]
那如何将可迭代对象变成迭代器对
象呢?
==> 使用 iter() 函数
iter([])
总结:
- 凡是可作用于 for 循环的对象都是 Iterable 类型;
- 凡是可作用于 next() 函数的对象都是 Iterator 类型
- 集合数据类型如 list 、 dict 、 str 等是 Iterable 但不是 Iterator ,不过可以通过 iter() 函数获得一个 Iterator 对象。
使用迭代器
迭代是Python最强大的功能之一,是访问集合元素的一种方式。
迭代器是一个可以记住遍历的位置的对象。
迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
迭代器有两个基本的方法:iter() 和new()
1. 创建迭代器:
#1. 将 list 、 dict 、 str 等是 Iterable的数据类型编程迭代器对象:
iter()
#2. 通过创建一个类来创建一个迭代器,把这个类作为迭代器使用。
#怎么创建这个类:需要在类里实现两个方法 __iter__() 与 __next__() :
#(如果你已经了解的面向对象编程,就知道类都有一个构造函数,Python 的构造函数为 __init__(), 它会在对象初始化的时候执行。)
__iter__() 方法返回一个特殊的迭代器对象, 这个迭代器对象实现了 __next__() 方法并通过 StopIteration 异常标识迭代的完成。
__next__() 方法(Python 2 里是 next())会返回下一个迭代器对象。
创建一个返回数字的迭代器,初始值为 1,逐步递增 1:
class MyNumbers:
def __iter__(self):
self.a = 1
return self
#无论何时创建迭代器都将调用_iter_()方法。这是用初始值对迭代器进行初始化的绝佳之处。
#以后创建并使用这个迭代器对象的时候,iter(seq)就是等同于seq._iter_()
def __next__(self):
x = self.a
self.a += 1
return x
#无论何时从迭代器中获取下一个值,都将调用_next_()方法。
#以后出去,next(seq)就是等同于seq._next_()
#相对于_next_()函数,_reversed_()按逆序创建一个迭代器。它以一个现有序列为参数,并将该序列中所有元素从尾到头以逆序排列生成一个新的迭代器。
myclass = MyNumbers()
myiter = iter(myclass)
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
# 1
# 2
# 3
# 4
# 5
2. 访问迭代器对象里的数据,有两种方式 :
- next(iterator_object):
- for循环:for x in (iterator_object)
一、使用new函数一个一个迭代访问
list=[1,2,3,4]
it = iter(list) # 创建迭代器对象
print (next(it)) # 输出迭代器的下一个元素
#1
print (next(it))
#2
二、迭代器遍历:
(1)迭代器对象可以使用常规for语句进行遍历:
list=[1,2,3,4]
it = iter(list) # 创建迭代器对象
for x in it:
print (x, end=" ")
#1 2 3 4
(2)也可以使用next()进行遍历:
import sys # 引入 sys 模块
list=[1,2,3,4]
it = iter(list) # 创建迭代器对象
while True:
try:
print (next(it))
except StopIteration:
sys.exit()
# 1
# 2
# 3
# 4