# print(dir([])) #告诉我列表拥有的所有方法# print(dir({})) #告诉我字典拥有的所有方法# print(dir('')) #告诉我字符串拥有的所有方法#看看共同的方法,变成集合取交集# ret = set(dir([]))&set(dir({}))&set(dir(''))# print(ret)#判断的是否有__iter__# print('__iter__' in dir(int))# print('__iter__' in dir(bool))# print('__iter__' in dir(list))# print('__iter__' in dir(dict))# print('__iter__' in dir(set))# print('__iter__' in dir(tuple))# print('__iter__' in dir(enumerate([])))# print('__iter__' in dir(range(1)))# 只要是能被for循环的数据类型 就一定拥有__iter__方法#print([].__iter__())# 一个列表执行了__iter__()之后的返回值就是一个迭代器# print(dir([]))# print(dir([].__iter__()))# print(set(dir([].__iter__())) - set(dir([])))#输出:{'__length_hint__', '__next__', '__setstate__'}#只要含有__iter__方法的都是可迭代的 ——可迭代协议#[].__iter__()迭代器#通过next就可以从迭代器中一个个的取值#迭代器协议--内部含有__next__和__iter__方法的就是迭代器#Iterable可迭代的;Iterator迭代器# from collections import Iterable# from collections import Iterator# print(isinstance([],Iterator))# print(isinstance([],Iterable))#迭代器协议和可迭代协议#可以被for循环的都是可迭代的#可迭代的内部都有__iter__方法#只要是迭代器 一定可迭代#可迭代的.__iter__()方法就可以得到一个迭代器#迭代器中的__next__()方法可以一个一个的获取值#for循环其实就是在使用迭代器#可能是迭代器:# iterator# 可迭代对象# 直接给你内存地址# print([].__iter__())# print(range(10)) #应该是十个数字,结果不是,可以怀疑是迭代器#for#只有 是可迭代对象的时候 才能用for#当我们遇到一个新的变量,不确定能不能for循环的时候,就判断它是否可迭代#for循环本质# for i in l:# pass#iterator = l.__iter__()#iterator.__next__()#迭代器的好处: # 从容器类型中一个一个的取值,会把所有的值都取到。 # 节省内存空间 #迭代器并不会在内存中再占用一大块内存, # 而是随着循环 每次生成一个 # 每次next每次给我一个#内存实验# print(range(100))# print(list(range(100)))#自己模仿for循环写一个# l = [1,2,3,45]# iterator = l.__iter__()# while True:# print(iterator.__next__())
转载于:https://www.cnblogs.com/dzc18/p/9396005.html
转载请注明原文地址: https://win8.8miu.com/read-25450.html