P叔带你学Python-14-迭代器

迭代器是Python中用于按顺序访问一组值的对象,常用于控制迭代过程。它们实现了_iter_()和_next_()方法,当无更多值时抛出StopIteration异常。通过for循环和next()函数可以遍历迭代器。此外,文章展示了如何创建自定义迭代器类MyList,以及迭代器与可迭代对象的区别。

迭代器是 Python 中非常重要的概念之一,它是一种对象,可以在代码中按顺序访问一组值。Python 中的大多数数据类型,如列表、元组、集合和字典都是可迭代的对象,这意味着它们可以使用 for 循环进行迭代。但是,在某些情况下,我们需要更精细的控制迭代过程,这就是迭代器的作用。

在这里插入图片描述

迭代器的定义和用法

在 Python 中,迭代器是一种实现了 _iter_() 和 _next_() 方法的对象。_iter_() 方法返回迭代器对象本身,而 _next_() 方法返回迭代器中的下一个值。如果没有更多的值可供迭代,它会引发 StopIteration 异常,这标志着迭代的结束。

以下是一个简单的示例,演示了如何使用迭代器遍历一个列表:

numbers = [1, 2, 3, 4, 5]   iter_obj = iter(numbers)      while True:       try:           item = next(iter_obj)           print(item)       except StopIteration:           break   

在上面的示例中,我们首先创建了一个名为 numbers 的列表,然后使用 iter() 函数创建了一个迭代器对象 iter_obj。接下来,我们使用 while 循环和 try-except 块来遍历迭代器。每次迭代,我们使用 next() 函数从迭代器中获取下一个值,并将其存储在变量 item 中。如果没有更多的值可供迭代,StopIteration 异常会被引发,我们会退出循环。

创建自己的迭代器

Python 中的迭代器是可自定义的,我们可以通过实现 _iter_() 和 _next_() 方法来创建自己的迭代器。以下是一个示例,演示了如何使用迭代器对象遍历一个自定义列表:

class MyList:       def \__init\__(self, data):           self.data = data           self.index = 0          def \__iter\__(self):           return self          def \__next\__(self):           if self.index < len(self.data):               item = self.data[self.index]               self.index += 1               return item           else:               raise StopIteration      my_list = MyList([1, 2, 3, 4, 5])      for item in my_list:       print(item)   

在上面的示例中,我们定义了一个名为 MyList 的自定义列表类,它包含一个名为 data 的属性和一个名为 index 的计数器。在 _iter_() 方法中,我们返回自身,表示迭代器对象本身就是迭代器。在 _next_() 方法中,我们检查计数器是否小于列表的长度,如果是,我们返回列表中的下一个元素并将计数器加 1。否则,我们引发 StopIteration 异常来表示迭代的结束。

接下来,我们创建一个名为 my_list 的 MyList 实例,并使用 for 循环来迭代它。在每次迭代中,我们使用 next() 方法从迭代器中获取下一个元素,并将其打印到控制台上。

迭代器 vs. 可迭代对象

在 Python 中,不同的数据类型具有不同的迭代行为。一些数据类型是可迭代的对象,而另一些则是迭代器对象。可迭代对象是指具有 _iter_() 方法的对象,而迭代器对象是指具有 _iter_() 和 _next_() 方法的对象。

可以使用 Python 内置函数 iter() 将可迭代对象转换为迭代器对象。例如,我们可以使用以下代码将一个列表转换为迭代器对象:

numbers = [1, 2, 3, 4, 5]   iter_obj = iter(numbers)   

注意,numbers 列表是可迭代对象,而 iter_obj 是迭代器对象。在使用 iter() 函数将可迭代对象转换为迭代器对象时,Python 会在后台自动调用 _iter_() 方法,以创建迭代器对象。

总结

在 Python 中,迭代器是一种对象,可以访问一组值,并按顺序返回它们。迭代器通过实现 _iter_() 和 _next_() 方法来工作。可迭代对象是具有 _iter_() 方法的对象,而迭代器对象是具有 _iter_() 和 _next_() 方法的对象。在 Python 中,大多数数据类型都是可迭代对象,但我们可以通过实现自己的迭代器来自定义迭代行为。

—END—

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。img

img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img
五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。img

六、面试宝典

在这里插入图片描述
在这里插入图片描述

简历模板在这里插入图片描述
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值