Python 迭代器

迭代器简述

迭代器(iterator)是一种可在容器(container)中遍访的接口,为使用者封装了内部逻辑。

——[百度百科·迭代器](https://baike.baidu.com/item/%E8%BF%AD%E4%BB%A3%E5%99%A8/3803342?fr=aladdin[1]) 大意

举例

for i in [1,2,3,4,5]:
    print(i)
print('-' * 10)
for i in 'hello':
    print(i)

输出结果

1
2
3
4
5
----------
h
e
l
l
o

判断是否是迭代器

可迭代对象须具有__iter__(),可迭代对象可以使用for循环进行遍历,可以使用

from collections.abc import Iterable
模块判断是否可迭代,示例如下
print(isinstance([1,2,3,4],Iterable))
print(isinstance((1,2,3,4),Iterable))
print(isinstance('hello',Iterable))
print(isinstance(1234,Iterable))
print(isinstance({"name":'张三',"age":12},Iterable))

输出

True
True
True
False
True

创建迭代器

要定义一个数据类型,具有__iter__()方法并且该方法返回一个带有__next__()方法的对象,而当该类已经具有__next__()方法时则返回其本身。示例代码如下:

class Reverse(object):
    '''方向遍历列表迭代器'''

    def __init__(self, data):
        self.data = data
        self.index = len(data)

    def __iter__(self):
        return self

    def __next__(self):
        '''迭代逻辑'''
        if self.index == 0:
            raise StopIteration
        else:
            self.index -= 1
            return self.data[self.index]

验证

title =iter(reversed('笑傲江湖'))

for i in title:
    print(i)

输出

湖
江
傲
笑

for 循环与迭代器

实际上在执行for语句的时候,Python 悄悄调用了内置函数`iter()`[6],并将for语句中的容器对象作为参数传入;而函数`iter()`[7]返回值则是一个迭代器对象。因此,for语句是将容器对象转换为迭代器对象之后,调用__next__()方法,逐个访问原容器中的各个对象,直到遍历完所有元素,抛出一个StopIteration异常,并终止for循环。

posted @ 2023-06-14 07:51  晓枫的春天  阅读(16)  评论(0编辑  收藏  举报