美文网首页
小结-Python-迭代器的实现方式

小结-Python-迭代器的实现方式

作者: Andrew0000 | 来源:发表于2019-05-06 15:51 被阅读0次

自定义迭代器

由于迭代器是一种类型,需要使用class关键字定义。迭代器需要实现next方法、iter方法以及函数初始化init方法

# -*- coding: utf-8 -*-
from collections.abc import Iterable
from collections.abc import Iterator

""" 反向遍历序列的迭代器"""


class Reverse_list:
    # 定义初始化函数,接受一个参数;
    def __init__(self, data):
        self.data = data
        self.index = len(data)

    # 定义iter方法,那么它就是一个可迭代对象
    def __iter__(self):
        return self

    # 定义next方法,那么它就是一个迭代器
    def __next__(self):
        if self.index == 0:
            raise StopIteration
        self.index = self.index - 1
        return self.data[self.index]


# 新建一个列表,调用自定义的迭代器
listTest = [1, 2, 3, 4, 5]
rev = Reverse_list(listTest)
print(isinstance(rev, Iterable), isinstance(rev, Iterator))
for i in rev:
    # for循环在遍历迭代器的时候,实际上同时调用了iter方法和next方法实现遍历。
    print(i, end=" ")
# Output:   True True   5 4 3 2 1

通过自定义迭代器的方式创建一个迭代器,实现了反向遍历的需求。

生成器实现迭代器

除去自定义迭代器,上一篇讲到关于生成器就是用于创建迭代器的,其形式类似于普通定义的函数,使用yield函数。相比较于自定义迭代器实现来说,生成器创建迭代器降低其复杂性。

# -*- coding: utf-8 -*-
from collections.abc import Iterable
from collections.abc import Iterator

# 使用生成器创建迭代器,只需要像定义普通函数一样,给定参数、写出逻辑、关键字yield;
def generator_Reverse_list(data):
    for index in range(len(data) - 1, -1, -1):
        # 比较自定义迭代器实现反向遍历的逻辑,显然生成器更简洁。
        yield data[index]


rev = generator_Reverse_list([1, 2, 3, 4, 5])
print(isinstance(rev, Iterable), isinstance(rev, Iterator))
for i in rev:
    print(i, end=" ")
# Output:   True True   5 4 3 2 1

小结:

实现迭代器有两种方式,第一种就是直接自定义迭代器,第二种就是生成器实现迭代器。相比较而言,通过生成器实现迭代器的方式更简洁高效,值得提倡和推荐。

相关文章

  • 小结-Python-迭代器的实现方式

    自定义迭代器 由于迭代器是一种类型,需要使用class关键字定义。迭代器需要实现next方法、iter方法以及函数...

  • JDK容器学习之HashMap (三) : 迭代器实现

    HashMap 迭代器实现方式 java的容器类,实现Collection接口的都会实现迭代器方式,Map则有点特...

  • python itertools

    PYTHON-进阶-ITERTOOLS模块小结

  • python-迭代器

    可迭代对象 判断可不可以迭代 转成迭代器

  • python-迭代器

    迭代器 1、构造方法 init() 无参构造和有参构造 class Foo(): def __init__(s...

  • Python-迭代器

    一、装饰器 开放封闭原则 装饰器的简单实现 装饰器语法糖 装饰有参有返的函数 有参装饰器 wraps修改函数文档注...

  • 生成器

    通过一致的方式遍历序列。这个特性是通过迭代器协议实现的,迭代器协议是一种令对象可遍历的通用方式。 当写下 for ...

  • 迭代器

    实现自己的迭代器 我们以生成斐波那契數列为例,创建一个迭代器类: 主要实现两个方法:iter 和 next调用方式...

  • 迭代器小结

    作者:邵正将 来源:PytLab 迭代器 迭代器是在python2.2中被加入的,它为类序列对象提供了一个类序列的...

  • 二分查找的难点

    二分查找有两种实现方式:递归实现,循环迭代实现,相比而言,迭代循环实现比较有难度 递归实现方式 迭代实现方式 二者...

网友评论

      本文标题:小结-Python-迭代器的实现方式

      本文链接:https://www.haomeiwen.com/subject/rgqdoqtx.html