day13 itertor
1.迭代器(itertor):
迭代:迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结 果会作为下一次迭代的初始值。
2.探究迭代器的工作原理:
可使用for循环的类型:list,dic,set,turple,f= open(),enumerate
为什么这些类型可以使用for循环?
print(dir(类型)) :可以用于查看函数里面存在的方法,即这些类型里面都存在某些相同的方法,而这些方法构成了循环这一功能
循环的原理:
循环的原理即调用函数内的方法:可使用双下划线的调用方法 例:print([].__iter__())
探究是函数内的那些方法构成循环的这一功能?
可使用交集判断是函数内那些方法(将类型转化为集合,在进行交集运算)
例:
ret = set(dir([]))&set(dir({}))&set(dir(''))&set(dir(range(10)))) print(ret)
输出结果:
{'__len__', '__getattribute__', '__str__', '__getitem__', '__lt__', '__gt__', '__ne__', '__new__', '__dir__', '__subclasshook__', '__delattr__', '__eq__', '__iter__', '__ge__', '__reduce_ex__', '__doc__', '__contains__', '__sizeof__', '__class__', '__init__', '__le__', '__hash__', '__format__', '__repr__', '__setattr__', '__reduce__', '__init_subclass__'}
判断类型内是否有某种方法:(下面为探究iter是否在list中,是的话,结果为True)
print('__iter__' in dir([]))
使用差集分析可得出:
print(set(dir([].__iter__()))-set(dir([])))
结果为:
{'__length_hint__', '__setstate__', '__next__'}
进而再对函数的方法含义再进行探究:
例:
l=[1,2,3] itertor = l.__iter__() print(itertor.__next__()) print(itertor.__next__()) print(itertor.__next__())
结果为:1
2
3
iterable(可迭代的),itertor(迭代器)
[].__iter__() 是可迭代的
[].__next__() 可以将元素一个一个从迭代器中取出
含有next和iter方法的类型就是一个迭代器
可以被for循环的都是可迭代的
可迭代的函数内部一定都有iter方法
只要是迭代器就一定可迭代
# for 只有时可迭代对象的时候,才能使用for
当我们遇到一个新变量的时候,不能判断它是否能forx循环的时候,就胖段它是否迭代
for i in l :
pass
itertor = i.__iter__()
itertor = i.__next__()
'''
#
'''
迭代器的好处:
可以取到容器类型中一个一个的值
节省内存空间,取一个值,释放一个值
如果正常使用print(list(range(10000)))将会一次性占用内存
'''