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日

相关文章

  • 浅谈终端直接执行py文件,不需要python命令

    要在终端中直接执行.py文件,不需要使用python命令,需要进行如下几个步骤: 1. 添加#!/usr/bin/env python解释器路径 在.py文件的第一行添加以下代码,标识该文件通过哪个解释器运行: #!/usr/bin/env python 2. 修改文件的权限 对.py文件进行权限修改,使其能够直接执行。修改命令如下: chmod +x &l…

    python 2023年5月18日
    00
  • Python中zipfile压缩包模块的使用

    使用Python的zipfile模块可以很方便地压缩、解压缩、读取zip文件的内容。本文将详细介绍zipfile模块的使用方法。 压缩文件 使用zipfile模块中的ZipFile类可以创建、添加、修改zip文件。以下是创建一个zip文件的示例代码: import zipfile zipname = "example.zip" with …

    python 2023年6月3日
    00
  • python生成指定长度的随机数密码

    生成指定长度的随机数密码有很多种方法,下面给出两种常用的Python方法。 方法一:使用random及string模块 import random import string def generate_password(length): # 生成由大小写字母、数字组成的字符集 letters = string.ascii_letters + string.d…

    python 2023年6月3日
    00
  • 你如何让汽车朝着它所面对的方向移动? (使用 python 和海龟图形)

    【问题标题】:How do you make a car move in the direction it is facing? (Using python and turtle graphics)你如何让汽车朝着它所面对的方向移动? (使用 python 和海龟图形) 【发布时间】:2023-04-02 17:14:01 【问题描述】: 我正在使用海龟图形…

    Python开发 2023年4月8日
    00
  • Python常用内置函数和关键字使用详解

    Python常用内置函数和关键字使用详解 Python是一门功能强大的编程语言,也是一门高级的解释型语言,拥有丰富的内置函数和关键字,可以大大提升我们的编程效率。下面将详细介绍Python常用内置函数和关键字的使用方法。 常用内置函数 print() print()函数是我们最常用的函数之一,它用于在控制台输出指定的内容。 示例: print("H…

    python 2023年5月20日
    00
  • 关于Python OS模块常用文件/目录函数详解

    Python OS模块是Python内置的一个用于访问操作系统功能的标准库。它允许我们进行诸如文件和目录的创建、读取、删除等常见的操作系统操作。在本攻略中,我们将详细讲解Python OS模块中常用的文件/目录处理函数。 os.getcwd() 获取当前工作目录的绝对路径。 示例代码: import os current_dir = os.getcwd() …

    python 2023年6月2日
    00
  • Django配合python进行requests请求的问题及解决方法

    以下是关于Django配合Python进行requests请求的问题及解决方法的攻略: Django配合Python进行requests请求的问题及解决方法 Django是一个流行的Python Web框架,可以用于开发Web应用程序。在Django中,我们可以使用Python中的requests库来发送HTTP请求和接收响应。以下是Django配合Pyth…

    python 2023年5月14日
    00
  • 基于pycharm的beautifulsoup4库使用方法教程

    基于PyCharm的BeautifulSoup4库使用方法教程 在本教程中,我们将介绍如何在PyCharm中使用BeautifulSoup4库来解析HTML和XML文档。我们将提供两个示例,演示如何获取HTML文档中的标题和链接。 安装BeautifulSoup4库 在使用BeautifulSoup4库之前,我们需要先安装它。可以使用pip命令来安装Beau…

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