【成人版python基础入门】第五章 迭代器——成为自己的“导游”
迭代器——成为自己的“导游”
在 Python 中,迭代器(Iterator)是处理集合数据的一种方式。它们允许你逐一访问集合中的元素,而不需要一次性加载所有数据。通过本文,你将了解到迭代器的基本概念,如何创建和使用自定义迭代器,以及 iter()
和 next()
函数的使用方法。迭代器就像是你的私人导游,带你走过代码的每一段旅程。
迭代器的基本概念
什么是迭代器
迭代器是一个可以记住遍历位置的对象。它的作用是按需生成数据,而不是一次性生成所有数据。这意味着在处理大量数据时,迭代器可以节省内存和提高性能。
风趣的例子
想象一下,你是一名导游,正在带领游客参观一座巨大的博物馆。博物馆里有许多展厅,每个展厅里都有许多展品。你的任务是带领游客逐一参观每个展厅的展品。
- 游客:相当于需要遍历的数据集合。
- 你:相当于迭代器,记住当前访问的展厅和展品位置。
- 逐一参观:相当于迭代过程,一次一个地访问展品。
迭代器的特点
- 按需生成数据:迭代器在需要时生成下一个数据,而不是一次性生成所有数据。
- 节省内存:因为数据是按需生成的,所以不需要大量内存来存储所有的数据。
- 惰性计算:迭代器可以延迟计算,只在需要时才计算下一个值。
- 无限序列:迭代器可以生成无限的数据序列,因为你不需要知道数据的总数。
创建自定义迭代器
定义迭代器
在 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()
函数的功能和使用方法。希望本文能够帮助你更好地掌握迭代器的使用,让你的代码更加高效和优雅。
代码学习,前言技术分享,深度分析编程技术,普及科普编程技术,天天都要敲代码
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)