【成人版python基础入门】第五章 迭代器——成为自己的“导游”

在这里插入图片描述

迭代器——成为自己的“导游”

在 Python 中,迭代器(Iterator)是处理集合数据的一种方式。它们允许你逐一访问集合中的元素,而不需要一次性加载所有数据。通过本文,你将了解到迭代器的基本概念,如何创建和使用自定义迭代器,以及 iter()next() 函数的使用方法。迭代器就像是你的私人导游,带你走过代码的每一段旅程。

迭代器的基本概念

什么是迭代器

迭代器是一个可以记住遍历位置的对象。它的作用是按需生成数据,而不是一次性生成所有数据。这意味着在处理大量数据时,迭代器可以节省内存和提高性能。

风趣的例子

想象一下,你是一名导游,正在带领游客参观一座巨大的博物馆。博物馆里有许多展厅,每个展厅里都有许多展品。你的任务是带领游客逐一参观每个展厅的展品。

  • 游客:相当于需要遍历的数据集合。
  • :相当于迭代器,记住当前访问的展厅和展品位置。
  • 逐一参观:相当于迭代过程,一次一个地访问展品。

迭代器的特点

  1. 按需生成数据:迭代器在需要时生成下一个数据,而不是一次性生成所有数据。
  2. 节省内存:因为数据是按需生成的,所以不需要大量内存来存储所有的数据。
  3. 惰性计算:迭代器可以延迟计算,只在需要时才计算下一个值。
  4. 无限序列:迭代器可以生成无限的数据序列,因为你不需要知道数据的总数。

创建自定义迭代器

定义迭代器

在 Python 中,创建自定义迭代器需要实现两个方法:__iter____next__

  • __iter__:返回迭代器对象本身。这是为了让对象可以被 for 循环等迭代工具使用。
  • __next__:返回集合中的下一个元素。当没有更多元素时,抛出 StopIteration 异常。

实际例子

假设我们有一个收藏歌曲的列表,我们想创建一个迭代器来逐一访问这些歌曲。

class SongCollection:
    def __init__(self, songs):
        self.songs = songs
        self.index = 0

    def __iter__(self):
        return self

    def __next__(self):
        if self.index < len(self.songs):
            song = self.songs[self.index]
            self.index += 1
            return song
        else:
            raise StopIteration

# 创建歌曲列表
songs = ["Bohemian Rhapsody", "Stairway to Heaven", "Hotel California"]

# 创建 SongCollection 对象
my_songs = SongCollection(songs)

# 使用 for 循环遍历歌曲
for song in my_songs:
    print(song)

运行结果

Bohemian Rhapsody
Stairway to Heaven
Hotel California

iter()next() 的使用

iter() 函数

iter() 函数用于创建一个迭代器对象。它接受一个可迭代的对象(如列表、字符串、字典等)作为参数,并返回一个迭代器。

next() 函数

next() 函数用于从迭代器中获取下一个元素。如果迭代器没有更多元素,它会抛出 StopIteration 异常。

实际例子

songs = ["Bohemian Rhapsody", "Stairway to Heaven", "Hotel California"]

# 创建迭代器
song_iterator = iter(songs)

# 获取下一个元素
print(next(song_iterator))  # 输出:Bohemian Rhapsody
print(next(song_iterator))  # 输出:Stairway to Heaven
print(next(song_iterator))  # 输出:Hotel California

# 没有更多元素时会抛出 StopIteration 异常
try:
    print(next(song_iterator))
except StopIteration:
    print("没有更多歌曲了!")

运行结果

Bohemian Rhapsody
Stairway to Heaven
Hotel California
没有更多歌曲了!

代码样例:创建一个可以遍历你收藏歌曲列表的迭代器

假设你有一个收藏歌曲的列表,你想创建一个迭代器来逐一访问这些歌曲。我们不仅会实现基本的迭代功能,还会添加一些额外的“导游”功能,比如播放歌曲和显示歌曲信息。

定义歌曲类

class Song:
    def __init__(self, title, artist, duration):
        self.title = title
        self.artist = artist
        self.duration = duration

    def __str__(self):
        return f"{self.title} - {self.artist} ({self.duration}秒)"

    def play(self):
        print(f"正在播放: {self.title} - {self.artist}")

定义歌曲集合迭代器

class SongCollection:
    def __init__(self, songs):
        self.songs = songs
        self.index = 0

    def __iter__(self):
        return self

    def __next__(self):
        if self.index < len(self.songs):
            song = self.songs[self.index]
            self.index += 1
            return song
        else:
            raise StopIteration

    def display_songs(self):
        for song in self:
            print(song)

    def play_songs(self):
        for song in self:
            song.play()
            print(song)

使用歌曲集合迭代器

# 创建歌曲列表
songs = [
    Song("Bohemian Rhapsody", "Queen", 355),
    Song("Stairway to Heaven", "Led Zeppelin", 480),
    Song("Hotel California", "Eagles", 390)
]

# 创建 SongCollection 对象
my_songs = SongCollection(songs)

# 显示歌曲信息
my_songs.display_songs()

# 播放歌曲
my_songs.play_songs()

运行结果

Bohemian Rhapsody - Queen (355秒)
Stairway to Heaven - Led Zeppelin (480秒)
Hotel California - Eagles (390秒)
正在播放: Bohemian Rhapsody - Queen
Bohemian Rhapsody - Queen (355秒)
正在播放: Stairway to Heaven - Led Zeppelin
Stairway to Heaven - Led Zeppelin (480秒)
正在播放: Hotel California - Eagles
Hotel California - Eagles (390秒)

摘要

迭代器是 Python 中非常有用的概念,它允许你逐一访问集合中的元素,就像是你自己的私人导游,带你走过代码的每一段旅程。通过本文,你了解了迭代器的基本概念,如何创建和使用自定义迭代器,以及 iter()next() 函数的功能和使用方法。希望本文能够帮助你更好地掌握迭代器的使用,让你的代码更加高效和优雅。

posted @   爱上编程技术  阅读(2)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示