- 1
- 0
- 约2.34千字
- 约 4页
- 2022-08-04 发布于四川
- 举报
什么是迭代器,Python迭代器及其用法
前面章节中,已经对列表(list)、元组(tuple )、字典(diet)、集合(set)这些序列式 容器做了详细的介绍。值得一提的是,这些序列式容器有一个共同的特性,它们都支持使用 for循环遍历存储的元素,都是可迭代的,因此它们又有一个别称,即迭代器。
从字面来理解,迭代器指的就是支持迭代的容器,更确切的说,是支持迭代的容器类对象, 这里的容器可以是列表、元组等这些Python提供的基础容器,也可以是自定义的容器类对 象,只要该容器支持迭代即可。
?Python实现自定义序列》一节中,已经学会了如何自定义一个序列类,但该序列类对象 并不支持迭代,因此还不能称之为迭代器。如果要自定义实现一个迭代器,那么类中必须实现 如下2个方法:
_next_(self):返回容器的下一个元素。
_iter_(self):该方法返回一^迭代器(iterator)。
例如,下面程序自定义了一个简易的列表容器迭代器,支持迭代:
class listDemo:
def_init_(self):
self._date=[]self._step = 0
def_next_(self):
7.if self._step = 0:
7.
raise Stopiterationself._step -= 1
#返回下一个元素return self._date[self._step]
def_iter_(self):
#实例对象本身就是迭代器对象,因此直接返回self即可return self
#添加元素def_setitem_(self key,value):
self._date.insertfkey,value)self._step += 1
mylist = listDemof)mylist[0]=l
mylist[l]=2for i in mylist:
print (i)
程序执行结果为:
除此之外,Python内置的iter()函数也会返回一个迭代器,该函数的语法格式如下:
iter(obj[, sentinel])
其中,。切必须是一个可迭代的容器对象,而sentinel作为可选参数,如果使用此参数, 要求。切必须是一个可调用对象,具体功能后面会讲。
可调用对象,指的是该类的实例对象可以像函数月瞬,直接以对象名()” 的形式被使用。通过在类中添加_call_0方法,就可以将该类的实例对象 编程可调用对象。有关_call_()方法,可阅读?Python _call_()>做详细了解。
我们常用的是仅有1个参数的iter()函数,通过传入一个可迭代的容器对象,我们可以获 得一个迭代器,通过调用该迭代器中的_next_()方法即可实现迭代。例如;
1.
#将列表转换为迭代器
2.
mylter = iter([l, 2, 3])
3.
#依次获取迭代器的下一个元素
4.
print(mylter._next_())
5.
print(mylter._next_())
6.
print(mylter._next_())
7.
print(mylter._next_())
运行结果为:
Traceback (most recent call last):
File C:\Users\mengma\Desktop\demo.py\ line 7, in module
print(mylter._next_())
Stopiteration另外,也可以使用next()内置函数来迭代,即next(mylter)和__next__() 方法是完全一样的。
从程序的执行结果可以看出,当迭代完存储的所有元素之后,如果继续迭代,那么_next_()
方法会抛出Stopiteration异常。
这里介绍iter()函数第2个参数的作用,如果使用该参数,那么要求第一个obj参数必须 传入可调用对象(可以不支持迭代),这样当使用返回的迭代器调用_next_()方法时, 它会通过执行。切()调用方法,如果该方法的返回值和第2个参数值相同,那么 输出Stoplnteration异常;反之,那么输出方法的返回值。
例如,修改listDemo类如下所示:
纯文本复制class listDemo:
def_init_(self):
self._date=[]self._step = 0
def_setitem_(selfkey,value):
self._date.insert(key, value)self._step += 1
#是该类实例对象成为可调用对象def_call_(self):
self._step-=lreturn self._date[self._step]
mylist = listDemof)
mylist[0]=l
您可能关注的文档
- 写给医院全体医护人员感谢信十篇范文.docx
- 写给医院全体医护人员感谢信十篇模板.docx
- 写给医生的感谢信十篇范例.docx
- 写给医生的感谢信十篇例文.docx
- 写给医生的感谢信五篇范本.docx
- 写给医生的感谢信五篇范例.docx
- 写给医生的感谢信五篇合集.docx
- 写给医生及护士们感谢信五篇范例.docx
- 写给医生及护士们感谢信五篇模板.docx
- 写给医生及护士们感谢信五篇例文.docx
- 2025年全国演出经纪人员资格认定考试试卷带答案(研优卷).docx
- 2025年全国演出经纪人员资格认定考试试卷完整版.docx
- 2025年全国演出经纪人员资格认定考试试题库及完整答案.docx
- 2025年全国演出经纪人员资格认定考试试卷完美版.docx
- 2025年全国演出经纪人员资格认定考试试卷含答案(实用).docx
- 2025年全国演出经纪人员资格认定考试试卷及答案(各地真题).docx
- 2025年下半年内江市部分事业单位公开考试招聘工作人员(240人)备考题库附答案.docx
- 2025年全国演出经纪人员资格认定考试试卷及答案1套.docx
- 2025年下半年四川成都市郫都区面向社会引进公共类事业单位人员2人备考题库最新.docx
- 2025年下半年内江市部分事业单位公开考试招聘工作人员(240人)备考题库附答案.docx
最近下载
- GB45673-2025《危险化学品企业安全生产标准化通用规范》解读.pptx
- SH15-M-40010非晶合金变压器设计.docx VIP
- 青岛市2025-2026学年(上期)高三期末考试政治试卷(含答案).docx
- 2025届高考物理二轮复习热点题型归类-专题06 牛顿运动定律的综合应用(教师版).docx VIP
- ASTME8/E8M2021金属拉伸实验最新美标中文版.pdf VIP
- 中国美术水墨画课件.pptx VIP
- Why Nations Fail书.pdf VIP
- 【高考真题】全国2024年统一高考物理真题试卷(新课标)附解析.docx VIP
- 2025届高考物理热点题型归类专题11功和功率及动能定理的理解与应用讲义+变式演练.pdf
- 幼儿园小班手指游戏集(13个) 幼儿园小班游戏教案.doc VIP
原创力文档

文档评论(0)