概述
2020年10月30日 11:23:21
1、什么是迭代器
迭代器 指的是迭代取值的工具,迭代是一个重复的过程,
每次重复都是基于上一次的结果而继续的,
单纯的重复并不是迭代。
比如:A+B生育了C, C+D=>E,生育过程是迭代,
克隆就不是迭代。
2、为何要有迭代器
迭代器是用来迭代取值的工具,而涉及到把多个值循环取出来的类型有:
列表、字符串、元组、字典、集合、打开的文件对象
实现一个简单的迭代取值功能(基于索引)
list001 = ["abc", "bbc", "cba", "bbq"]
i = 0
while i < len(list001):
print(list001[i])
i += 1
上面这种迭代取值的方式只适用于有索引的数据类型:列表,字符串,字典
为了解决基于索引迭代取值的局限性,python必须提供一种能够不依赖索引的取值方式,这就是迭代器
首先,了解一下“可迭代对象”:可以转换成“迭代器”的对象
可迭代对象:但凡内置有 _ iter _ 方法的都称之为可迭代对象
''.__iter__()
[].__iter__()
().__iter__()
{}.__iter__()
with open("a.txt", mode="w") as f:
f.__iter__()
pass
(字符串,列表,元组,字典,集合, 打开的文件,都是可迭代对象)
调用 可迭代对象下的 _ iter_ 方法会将其转换成迭代器对象
d = {"a": 1, "b": 2, "c": 3}
res = d.__iter__()
print(res)
运行结果:
<dict_keyiterator object at 0x000000000213E908>
转换成迭代器后,有一个 _ next _ 方法
d = {"a": 1, "b": 2, "c": 3}
res = d.__iter__()
print(res)
print(res.__next__())
print(res.__next__())
print(res.__next__())
运行结果:
<dict_keyiterator object at 0x000000000214E908>
a
b
c
--------分界线--------
#重复执行迭代器会怎样?
#在一个迭代器取值取干净的情况下,再对其取值,取不到
#必须再调用一次迭代器才能取值
#步骤: 1、调用迭代器 2、取值
d = {"a": 1, "b": 2, "c": 3}
res = d.__iter__()
while True:
try:
print(res.__next__())
except StopIteration:
break
print("=====>>>>>")
# 重复执行迭代器会怎样?
# 在一个迭代器取值取干净的情况下,再对其取值,取不到
# 必须再调用一次迭代器才能取值
# 步骤: 1、调用迭代器
2、取值
res = d.__iter__()
while True:
try:
print(res.__next__())
except StopIteration:
break
3、可迭代对象与迭代器对象详解
-
可迭代对象(“可以转换成迭代器的对象”):内置有_ iter _方法 的对象
可迭代对象.__iter__() :得到迭代器对象
-
迭代器对象:内置有 _ next _ 方法,并且内置有 _ iter _方法 的对象
迭代器对象.__next__() :得到迭代器的下一个值 迭代器对象.__iter__() :得到迭代器的本身,就是,调了跟没调用一样 这是为了让 for 幕后统一格式
-
for 循环的工作原理(for循环就是“迭代器循环”)
- 从 d._ iter _() 那里得到一个迭代器对象
- 从 迭代器对象._ next _() 那里拿到一个返回值,然后将该返回值赋值给 k
- 循环往复步骤2,直到抛出 StopIteration 异常,for循环会捕捉异常,然后结果循环
print("----for----")
for k in d:
print(k)
代码运行结果:
a
b
c
=====>>>>>
a
b
c
----for----
a
b
c
最后
以上就是机智大神为你收集整理的Python迭代器调用 可迭代对象下的 _ iter_ 方法会将其转换成迭代器对象的全部内容,希望文章能够帮你解决Python迭代器调用 可迭代对象下的 _ iter_ 方法会将其转换成迭代器对象所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复