首页 > 其他 > 详细

19函数----迭代器

时间:2021-04-03 19:45:03      阅读:14      评论:0      收藏:0      [点我收藏+]

1、可迭代对象(iterable)

可迭代对象都有一个 __iter__() 方法,也就是说有 __iter__() 方法的对象,就是可迭代对象。
hello.__iter__
(1,2,3).__iter__
[1,2,3].__iter__
{a:1}.__iter__
{a,b}.__iter__
open(a.txt).__iter__

2、迭代器(iterator)

可迭代对执行obj.__iter__()得到的结果就是迭代器对象
迭代器对象:有__iter__()方法和__next__()方法,当没有数据可用时则将引发 StopIteration 异常。 或:迭代器有两个基本方法: iter() 返回一个迭代器对象, next() 逐一返回迭代对象中的项
文件类型是迭代器对象
from collections import Iterable
from collections import Iterator
open(data.txt).__iter__()
open(data.txt).__next__()
print(isinstance(open(data.txt), Iterable))
print(isinstance(open(data.txt), Iterator))

3、通过iter()函数返回可迭代对象的迭代器

from collections import Iterable
from collections import Iterator
dic = {
    a:1,
    b:2,
    c:3,
}
print(isinstance(dic, Iterable))# 判断一个对象是否可以迭代 True
print(isinstance(dic, Iterator))# 判断一个对象是否是迭代器 False
dic_iter = dic.__iter__() #等同于dic_iter = iter(dic)
print(dic_iter)
print(isinstance(dic, Iterable))# 判断一个对象是否可以迭代 True
print(isinstance(dic, Iterator))# 判断一个对象是否是迭代器 True

 4、for循环

for k in dic: # for循环会自动调用__iter__(),生成一个迭代器
    print(dic[k])
for循环的工作原理
1:执行in后对象的dic.__iter__()方法,得到一个迭代器对象iter_dic
2: 执行next(iter_dic),将得到的值赋值给k,然后执行循环体代码
3: 重复过程2,直到捕捉到异常StopIteration,结束循环

5、迭代器的优缺点

优点:1、提供了不依赖于索引的迭代方式(字典、集合、文件就没有索引)
2、惰性计算,只在需要时才调用__next__()方法获得下个值,同一时刻内存中只有一个值,可以存放无限大的数据
缺点:1、除非取尽,否则不能获得长度
2、不能回头

 

19函数----迭代器

原文:https://www.cnblogs.com/cc-world/p/14014921.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!