首页 > 编程语言 >一文搞懂Python迭代器(通俗易懂)

一文搞懂Python迭代器(通俗易懂)

时间:2024-11-30 11:28:26浏览次数:6  
标签:__ 迭代 Python self iter 对象 搞懂 my

一文搞懂Python迭代器(通俗易懂)

python迭代器是一个相对难以理解的概念,Up在初次接触时也觉得晦涩。本文尽可能用通俗易懂的语言和例子,解释清楚python迭代器。

注:本文长期有效,持续迭代完善,建议收藏。

提前划重点

  • 两个概念:迭代器对象和可迭代对象
  • 例子:代码实现迭代器对象和可迭代对象
  • 拆解for循环

两个概念:迭代器对象和可迭代对象

可迭代对象:实现了__iter__()方法的对象

迭代器对象:实现了__iter__()__next__()方法的对象称为迭代器对象

通过定义可以知道,迭代器对象一定是可迭代对象

简单解释一下这两个方法

__iter__()方法要返回一个迭代器对象,你可以使用iter() 函数来触发它。

__next__()方法用于从迭代器中返回下一个值,如果没有可返回值了,抛出 StopIteration异常。你可以使用next() 函数来触发它。

这么说还是有点抽象,下面用一个例子来理解一下:

例子:代码实现迭代器对象和可迭代对象

# 可迭代类
class MyIterable:
    def __init__(self, data_list):
        self.data_list = data_list  # 存储数据

    def __iter__(self):
        return MyIterator(self)  # __iter__方法要返回一个迭代器对象,且每次调用返回新的对象

# 迭代器类
class MyIterator:
    def __init__(self, my_iterable):
        self.my_iterable = my_iterable
        self.index = 0  # 用于跟踪当前的位置

    def __iter__(self):
        return self  # 一般迭代器类的__iter__方法都返回self,因为自己就是迭代器对象

    def __next__(self):
        if self.index >= len(self.my_iterable.data_list):
            raise StopIteration  # 如果没有更多元素,则抛出StopIteration异常
        result = self.my_iterable.data_list[self.index]
        self.index += 1
        return result

#### 使用示例
my_list = [1, 2, 3, 4, 5]

# my_iterable是一个可迭代对象
my_iterable = MyIterable(my_list)

# my_Iterator是一个迭代器对象
# iter(Object)会执行 Object.__iter__(),返回一个迭代器对象
my_Iterator = iter(my_iterable)

# next(Object)会执行 Object.__next__(),返回下一个值
print(next(my_Iterator)) # 打印 1
print(next(my_Iterator)) # 打印 2

一个值得关注的点:迭代器对象是有状态的,比如这里的index会一直增大。所以每次调用可迭代对象的__iter__(),都返回一个新的迭代器对象

大家是不是觉得,这么这个用法似曾相识?是的,这不就是for循环干的事儿吗,一直next直到没有值返回了。没错,接下来我们就来拆解一下for循环的本质!

拆解for循环

这个是我们熟悉的for循环用法:

numbers = [1, 2, 3, 4, 5]

for num in numbers:
    print(num)

那底层是怎么实现的呢

numbers = [1, 2, 3, 4, 5] # numbers数组是一个可迭代对象,python中list,dict,tuple,set都是可迭代对象
numbers_iterator = iter(numbers) # 返回一个numbers专属的迭代器对象
while True:
    try:
        # 调用next获取下一个元素
        item = next(iterator)
        print(item)
    except StopIteration:
        # 没有更多元素时退出循环
        break

for循环的语法相当于把这些底层的实现隐藏起来,让用户可以用更简单的写法表达循环。其实搞懂了可迭代对象和迭代器对象的原理,也就很容易理解for循环的本质。

在python中list,dict,tuple,set都是可迭代对象,所以都可以用for循环遍历,iter方法都会返回一个专属的迭代器对象。

下期预告

有一个很特殊的迭代器yield,也是一个不太好理解的概念。下期我们也尽可能通俗易懂拆解一下yield。听说点赞越多,Up更得越快。感谢支持,下期见!

标签:__,迭代,Python,self,iter,对象,搞懂,my
From: https://blog.csdn.net/weixin_45536837/article/details/144151575

相关文章

  • Python读写excle之xlrd、xlwt
    1.1、xlrd模块介绍xlrd:用于读取Excle数据文件将返回的数据对象放到内存中,然后查询数据文件对象的相关信息。xlwt:用于在内存中生成新的数据文件对象,处理完成后写入到Excel数据文件中。xlutils:主要的作用就是copy新的文件对象,在新的数据对象中完成数据处理操作。注意:在使用xlrd......
  • Python输入多个变量和输入列表
    输入多个变量:mapmap()函数的基本用法是将一个函数和一个可迭代对象作为参数传递给它,然后返回一个迭代器,该迭代器会生成经过指定函数转换后的元素。a,b=map(int,input().split())例题:P1980[NOIP2013普及组]计数问题numlist=[]count=0n,x=map(int,input().split(......
  • 【新人系列】Python 入门(十四):文件操作
    ✍个人博客:https://blog.csdn.net/Newin2020?type=blog......
  • python语言实现_通过端口转发实现跨网络(多网络之间)通信_science_network
    本文使用python语言实现了一个端口转发的程序,该程序可以实现多网络之间的信息通信,当然这里有个前提,那就是多个网络都在一台主机上有可以连通的端口。之所以有这个编写代码的需求,是因为最近使用的sciencenetwork工具不大好用了,于是就要博士同学发给我一个好用些的来,固然发现同学......
  • springboot庀材二手房交易平台--41611(免费领源码)可做计算机毕业设计JAVA、PHP、爬虫、
    摘要在互联网飞速发展的当下,开发庀材二手房交易平台是为了利用互联网和科学技术来满足二手房交易市场日益增长的需求,提供一个方便快捷的平台供用户进行二手房交易。通过开发此系统,可以解决传统二手房交易中信息不透明、中介费高昂等问题,提供更便捷、透明、安全的交易环境。......
  • 【纯干货分享】计算机毕业设计必看必学36113+PHP 高校成绩管理系统原创的定制程序,单
     高校成绩管理系统的设计与实现摘 要随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理。在现实运用中,应用软件的工作规则和开发步骤,采用PHP技术建设高校成绩管理系统。本设计主要实现集人性化、高效......
  • 【纯干货分享】计算机毕业设计必看必学(44127+spark 手机销售数据的可视化分析系统)原创
    spark手机销售数据的可视化分析系统摘 要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对手机销售数据管理等问题,对手机销售数据管理进行研究分......
  • 【纯干货分享】计算机毕业设计必看必学30973+springboot 个人健康管理系统小程序原创
    摘 要随着中国经济的飞速增长,消费者的智能化水平不断提高,许多智能手机和相关的软件正在得到更多的关注和支持。其中,微信小程序的个人健康管理系统更是深得消费者的喜爱,它的出现极大地改善了消费者的生活质量,同时,它还创造了一种快捷、有效的数据信息管理网络平台,让消费者更......
  • python毕设 药店药品信息管理系统程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于药店药品信息管理系统的研究,现有研究主要以传统的药品管理模式为主,专门针对利用Python开发的药店药品信息管理系统的研究较少。在......
  • 【Python系列】Python 中生成词云图的详细指南
    ......