Python迭代器

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)

运行结果:

转换成迭代器后,有一个 _ next _ 方法

d = {"a": 1, "b": 2, "c": 3}
res = d.__iter__()
print(res)
print(res.__next__())
print(res.__next__())
print(res.__next__())

运行结果:

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、可迭代对象与迭代器对象详解

  1. 可迭代对象(“可以转换成迭代器的对象”):内置有_ iter _方法 的对象

    可迭代对象.__iter__() :得到迭代器对象
    
  2. 迭代器对象:内置有 _ next _ 方法,并且内置有 _ iter _方法 的对象

    迭代器对象.__next__() :得到迭代器的下一个值
    迭代器对象.__iter__() :得到迭代器的本身,就是,调了跟没调用一样
        这是为了让 for 幕后统一格式
    
  3. for 循环的工作原理(for循环就是“迭代器循环”)

    1. 从 d._ iter _() 那里得到一个迭代器对象
    2. 从 迭代器对象._ next _() 那里拿到一个返回值,然后将该返回值赋值给 k
    3. 循环往复步骤2,直到抛出 StopIteration 异常,for循环会捕捉异常,然后结果循环
print("----for----")
for k in d:
    print(k)

代码运行结果:

a
b
c
=====>>>>>
a
b
c
----for----
a
b
c

你可能感兴趣的:(Python,python)