8.12 迭代器

让人想犯罪 __ 提交于 2019-11-27 03:12:12

8.12 迭代器

定义

迭代器:迭代的工具。迭代是更新换代,如你爷爷生了你爹,你爹生了你,迭代也可以说成是重复,并且但每一次的重复都是基于上一次的结果来的。

可迭代对象

python中,一切皆对象:

x = 1
name = 'nick'
lis = [1, 2]
tup = (1, 2)
dic = {'name': 'nick'}
s1 = {'a', 'b'}
f = open('49w.txt', 'w', encoding='utf-8)
         
def func():
    pass

对于这一切的对象中,但凡有__iter__方法的对象,都是可迭代对象。

# 以下都是可迭代的对象

name = 'nick'.__iter__
lis = [1, 2].__iter__
tup = (1, 2).__iter__
dic = {'name': 'nick'}.__iter__
s1 = {'a', 'b'}.__iter__
f = open('49w.txt', 'w', encoding='utf-8')
f.__iter__

可迭代的对象:Python内置str、list、tuple、dict、set、file都是可迭代对象。

特点:内置有__iter__方法的都叫可迭代的对象。

迭代器对象

只有字符串和列表都是依赖索引取值的,而其他的可迭代对象都是无法依赖索引取值的。因此我们得找到一个方法能让其他的可迭代对象不依赖索引取值。

在找到该方法前,首先我们给出迭代器对象的概念:可迭代的对象执行__iter__方法得到的返回值。并且可迭代对象会有一个__next__方法。

# 不依赖索引的数据类型迭代取值
dic = {'a': 1, 'b': 2, 'c': 3}
iter_dic = dic.__iter__()
print(iter_dic.__next__())
print(iter_dic.__next__())
print(iter_dic.__next__())
# print(iter_dic.__next__())  # StopIteration:
"""
a
b
c
"""

# 依赖索引的数据类型迭代取值
lis = [1, 2, 3]
iter_lis = lis.__iter__()
print(iter_lis.__next__())
print(iter_lis.__next__())
print(iter_lis.__next__())
# print(iter_lis.__next__())  # StopIteration:
'''
1
2
3
'''

for循环原理

for 循环就是利用可迭代对象进行while循环+try...except实现的

  1. 首先使用iter把lt变成迭代器对象;对于文件也要使用iter方法吧文件再一次iter下
  2. 然后使用next方法进行迭代取值
  3. 判断StopIteration异常,遇到异常终止

例如:

lt = [1,2,3]
for i in lt:
    print(i)

lt_iter = lt.__iter__()
while 1:
    try:
        print(lt_iter.__next__())
    except StopIteration:
        break

扩展-iter可当作内置方法来使用,但**尽量使用__iter__**

dic ={'a':1,'b':2}
dic_iter = iter(dic)
print(next(dic_iter))
print(next(dic_iter))
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!