Python中的迭代器与生成器使用及说明

yizhihongxing

Python中的迭代器与生成器使用及说明

什么是迭代器?

在 Python 中,迭代器是一个实现了 __iter__()__next__() 方法的对象。__iter__() 返回迭代器对象本身,__next__() 返回迭代器中的下一个值。如果没有更多的值可供迭代,那么 __next__() 方法应该抛出 StopIteration 异常。

迭代器的使用

可以使用 iter() 函数创建一个迭代器对象,生成式也可以用于创建迭代器。

示例一:使用迭代器遍历列表

lst = [1, 2, 3]
it = iter(lst)
print(next(it)) # 1
print(next(it)) # 2
print(next(it)) # 3

示例二:使用迭代器遍历自定义类

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return f"{self.name}({self.age})"

    def __iter__(self):
        self.index = -1
        return self

    def __next__(self):
        self.index += 1
        if self.index >= 2:
            raise StopIteration
        if self.index == 0:
            return self.name
        else:
            return self.age

p = Person("Tom", 18)
it = iter(p)
print(next(it)) #Tom
print(next(it)) #18
print(next(it)) #StopIteration 抛出异常

什么是生成器?

生成器是能够产生值序列的函数,这些值在缩进块中通过 yield 语句生成。当函数被调用时,它并不会立即执行,而是返回生成器对象。类似于迭代器,可以通过 yield 语句逐个获取生成器返回的值。

生成器的使用

使用生成器相当于定义一个函数,其中包含 yield 语句。当函数被调用时,它会返回生成器对象。可以使用 next() 函数或者 for 循环语句逐个获取返回的值,当函数执行完成时,会抛出 StopIteration 异常。

示例三:使用生成器构建Fibonacci序列

def fibonacci(n):
    a, b = 0, 1
    count = 0
    while count < n:
        yield b
        a, b = b, a + b
        count += 1

for x in fibonacci(5):
    print(x) # 1, 1, 2, 3, 5

示例四:使用生成器实现扁平化处理

def flatten(lst):
    for item in lst:
        if isinstance(item, list):
            yield from flatten(item) #使用yield from简化代码
        else:
            yield item

lst = [[1, [2, 3]], [4, 5, [6, [7]]]]
for item in flatten(lst):
    print(item) #1, 2, 3, 4, 5, 6, 7

总结

迭代器和生成器是 Python 程序中非常重要的组成部分。通过合理运用迭代器和生成器可以让程序在运行速度和内存空间两方面得到更好的优化。正因如此,JavaScript、PHP、Ruby等编程语言也加入了对迭代器和生成器的支持。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python中的迭代器与生成器使用及说明 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • Python中psutil的介绍与用法

    Python中psutil的介绍与用法 什么是psutil psutil是一个在Python中获取系统信息(包括CPU、内存、磁盘、网络等等)的库,可以让我们更方便地管理和监测系统资源,并且支持跨平台运行(Windows、Linux、OSX等系统)。 安装 使用pip安装: pip install psutil 基础用法 CPU 获取CPU的一些基本信息,比…

    python 2023年5月14日
    00
  • python实现将内容分行输出

    下面是Python实现将内容分行输出的完整攻略。 1. 使用换行符”\n” 可以使用换行符”\n”来实现将内容分行输出的功能,具体步骤如下: 定义一个字符串,该字符串包含需要输出的内容。 在字符串的适当位置使用”\n”来表示换行,将需要分行的内容拆分到不同的行中。 使用print()函数将字符串输出到终端。 示例: text = ‘Python is a\n…

    python 2023年6月3日
    00
  • Autopep8的使用(python自动编排工具)

    Autopep8是一款开源的Python自动编排工具,它可以自动修复Python代码中的格式问题,包括缩进、空格、行长度等问题。使用Autopep8能够帮助开发者快速准确地排版Python代码,避免因格式问题产生的调试困难和Bug。 下面是使用Autopep8的完整攻略: 安装Autopep8 使用pip工具可以轻松安装Autopep8,可在终端中输入以下命…

    python 2023年5月19日
    00
  • Python创建7种不同的文件格式的方法总结

    Python创建7种不同的文件格式的方法总结 Python作为一门广泛应用于各种场景的编程语言,能够灵活方便地处理各种文件格式。本文将总结Python创建7种不同的文件格式的方法。 1. 创建文本文件 我们可以使用Python的open()函数来创建文本文件。下面的代码演示了如何使用Python创建文本文件,并将字符串”Hello World!”写入文件中。…

    python 2023年6月3日
    00
  • Python模块文件结构代码详解

    Python模块文件结构代码详解攻略 Python模块是将一组相关的函数、类和变量等封装到一个文件中,方便在程序中导入。在编写Python程序时,使用模块可以提高代码的可复用性和可维护性。 本文将详细讲解Python模块文件的结构和代码,包括模块的基本结构、 init.py文件的作用,以及如何导入模块等。 模块的基本结构 Python模块的基本结构包括以下几…

    python 2023年6月5日
    00
  • Python必备技巧之字符数据操作详解

    Python必备技巧之字符数据操作详解 字符数据类型 在Python中,字符串是一种常见的数据类型。字符串是一个由字符序列组成的不可变序列。因为字符串不可变,因此不能像列表一样进行就地修改。字符串可以使用单引号或双引号来表示。 字符串连接和重复 字符串可以连接起来形成新的字符串。连接操作可以使用+运算符或通过字符串插值完成。例如: str1 = "…

    python 2023年5月14日
    00
  • 详谈python http长连接客户端

    HTTP长连接是一种在单个TCP连接上进行多次HTTP请求和响应的技术。它可以帮助我们更高效地进行HTTP通信和数据交换。在Python中,我们可以使用requests库来实现HTTP长连接客户端。本文将通过实例讲解如何使用Python实现HTTP长连接客户端,包括安装和使用requests库,以及两个示例。 安装requests库 在使用requests库…

    python 2023年5月15日
    00
  • python实现学生信息管理系统(面向对象)

    下面我来详细讲解Python实现学生信息管理系统(面向对象)的完整攻略。 1. 理解需求 在开始实现一个项目之前,我们需要对项目的需求有一个明确的了解。比如这个学生信息管理系统,它需要完成以下几个功能: 添加学生信息 删除学生信息 修改学生信息 查询学生信息 显示所有学生信息 2. 数据结构与类设计 针对这些需要实现的功能,我们需要考虑如何设计数据结构以及相…

    python 2023年5月30日
    00
合作推广
合作推广
分享本页
返回顶部