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

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 脚本的三种执行方式小结

    下面是详细讲解“Python 脚本的三种执行方式小结”的攻略。 Python 脚本的三种执行方式 在使用 Python 编写脚本时,可以通过以下三种方式执行脚本: 直接运行脚本文件 通过解释器执行脚本文件 将脚本文件作为模块导入并调用 下面分别进行详细讲解。 直接运行脚本文件 直接运行脚本文件是最简单的执行方式。只需要在终端中输入以下命令即可运行脚本文件: …

    python 2023年5月19日
    00
  • Python脚本实现自动登录校园网

    请看下面我为您详细讲解Python脚本实现自动登录校园网的完整攻略。 一、准备工作 1.1 确认登录方式 要实现自动登录校园网,首先要确认校园网的登录方式,一般来说有以下几种: 基于Web表单的登录:需要提交表单(一般是POST请求)来完成登录。 基于二维码的登录:需要将二维码输入到APP或者微信中才能完成登录。 基于HTTP Basic认证的登录:需要在请…

    python 2023年5月19日
    00
  • Python装饰器实现函数运行时间的计算

    Python装饰器实现函数运行时间的计算需要遵循下面的步骤: 1. 编写计时器装饰器函数 我们可以编写一个计时器装饰器函数,用来计算函数运行所花费的时间。 import time def timer(func): def wrapper(*args, **kwargs): start_time = time.time() result = func(*arg…

    python 2023年6月2日
    00
  • Python简单实现Base64编码和解码的方法

    下面是“Python简单实现Base64编码和解码的方法”的完整攻略: 1. Base64编码概述 Base64是一种将数据编码的方法,可将任意二进制数据转换为纯文本格式便于传输。 Base64编码由64个字符组成,即:A-Z、a-z、0-9和“+”、“/”两个符号。 2. Python内置库 base64 在Python中,可以很方便地使用内置库base6…

    python 2023年5月31日
    00
  • 在python中将字符串转为json对象并取值的方法

    在 Python 中将字符串转为 JSON 对象并取值的方法可以通过使用 json 模块来实现。具体步骤如下: Step 1:导入 json 模块 在使用 json 模块之前,需要先导入该模块。导入方式如下: import json Step 2:使用 json.loads() 方法将字符串转为 JSON 对象 通过使用 json.loads() 方法,可以…

    python 2023年6月3日
    00
  • 聊聊python中的load、loads实现反序列化的问题

    反序列化是将序列化的数据结构重新转化为可被程序读取的数据结构的过程,而在 Python 中,常用的反序列化方法是 load 和 loads。在本篇文章中,我们将讲解这两个方法的使用方法以及它们的区别。 什么是反序列化 反序列化是将序列化的数据结构重新转化为可被程序读取的数据结构的过程。在 Python 中,我们可以使用 pickle 模块对 Python 对…

    python 2023年6月3日
    00
  • 正确的使用Python临时文件

    当我们编写Python程序时,有时候需要操作一些临时文件,比如说缓存文件,临时日志等等。为了避免这些文件在程序退出时占用空间,我们需要正确的使用Python临时文件。下面就是正确的使用Python临时文件的完整攻略: 1.借助tempfile库创建临时文件 tempfile库是Python内置库,主要用来处理文件系统上的文件和目录的命名问题,提供了创建临时文…

    python 2023年6月2日
    00
  • Python实现随机爬山算法

    Python实现随机爬山算法 随机爬山算法是一种常用的优化算法,它的主要思想是从一个随机的起点开始,每次随机选择一个相邻的状态,并根据目标函数的值决定是否接受该状态。本文将详细讲解如何使用Python实现随机爬山算法,并提供两个示例说明。 随机爬山算法原理 随机爬山算法的基本思想是从一个随机的起点开始,每次随机选择一个相邻的状态,并根据目标函数的值决定是否受…

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