当前位置: Python基础教程 > 17-多任务-协程 > 阅读正文

python的迭代器

2021.7.5.   392 次   1007字

迭代, 是一种循环遍历方式, 可迭代对象指的是能被遍历对象

并非所有的数据类型, 都可以使用迭代器

判断对象是否可以迭代

判断它是否继承自Iterable, 如果是, 则可以迭代

1.导入Iterable类

from collections import Iterable

2.使用isinstance判断继承关系

isinstance([11, 22, 33], Iterable)

结果返回true, 说明list可以迭代, 其他类型也可以使用此方法

迭代器实例

迭代器对象, 可以被for in循环遍历

class Classmate(object):
    def __init__(self):
        self.names = list()
        self.current_num = 0

    def add(self, name):
        self.names.append(name)

    def __iter__(self):
        """必须实现__iter__方法"""
        return self    # 必须返回一个对象, 该对象具有__iter__方法和__next__方法

    def __next__(self):     # next方法会自动被for调用, 返回每次迭代数据
        if self.current_num < len(self.names):
            ret = self.names[self.current_num]
            self.current_num += 1
            return ret
        else:
            raise StopIteration  # 终止for, 否则不会停止


def main():
    classmate = Classmate()
    classmate.add("老王")
    classmate.add("大王")
    classmate.add("小王")

    # 迭代此对象
    for temp in classmate:
        print(temp)


if __name__ == "__main__":
    main()

list在生成后, 就占据大量的内存空间, 即使不被调用

普通的循环while循环做到, 但对象的遍历使用迭代器更方便

迭代器的优点, 是占用极小的内存空间, 它返回的是对象, 仅在被调用时生成迭代数据, 在某些情况下替代list ( 也可以用while替代list )

在py2中range返回的是list, 而xrange返回的是一个对象, 后者占用极小内存, 不过在py3中range已经改变, 返回的是对象

此外, 并不是只有for循环能接收可迭代对象, list, tuple等也可以, 在类型转换时, 内部其实用到了迭代器重新生成数据

本篇完,还有疑问?

加入QQ交流群:11500065636 IT 技术交流群