营销型网站教程,手机邀请函制作软件app,国内十大游戏公司排名,wordpress后台地址更改一、定义 1.iterator.(迭代器#xff09; 2.iterable.#xff08;可迭代的#xff09; 一般来说#xff0c;可以被for循环的就是可以迭代的#xff0c;迭代器一定可以迭代#xff0c;但是可迭代的类型不一定是迭代器。 二、说明 1.有__iter__方法#xff0c;说明可迭代 …一、定义 1.iterator.(迭代器 2.iterable.可迭代的 一般来说可以被for循环的就是可以迭代的迭代器一定可以迭代但是可迭代的类型不一定是迭代器。 二、说明 1.有__iter__方法说明可迭代 def shili1():print(dir([]))
#告诉我列表拥有的所有方法print(dir(()))print(dir())print(dir(range(10)))retset(dir([]))set(dir())set(dir({}))set(dir(range(10)))print(ret)
#有一个__iter__ 判断一下这些类型有没__iter__方法 print(__init__ in dir(int))
print(__init__ in dir(list))
print(__init__ in dir(dict))
print(__init__ in dir(set))
print(__init__ in dir(tuple))
print(__init__ in dir(enumerate))
print(__init__ in dir(range(10)))
print(__iter__ in dir(int)) #false
print(__iter__ in dir(bool)) #false
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(10))) 2.#setstate指定从那个位置开始取一般是从0位开始 一个可迭代的类型执行了iter之方法后的返回值就是一个迭代器 print(set(dir([].__iter__())) - set(dir([])))
# {__setstate__, __next__, __length_hint__} 3.示例1(可迭代的不一定是迭代器迭代器一定可迭代 print(**40)
l[1,2,3]
iteratorl.__iter__()
print(iterator.__next__()) #l内部没有next方法调用iter之后的返回值有next
print(iterator.__next__()) #l内部没有next方法调用iter之后的返回值有next
print(iterator.__next__()) #l内部没有next方法调用iter之后的返回值有next
# print(iterator.__next__()) #报错
# 不能被循环的 not iterable(不可迭代的 - __iter__ -只要含有iter就可迭代且都可以被for循环 - 可迭代协议 4.创建一个iterator #[].__iter__()拿到一个
#可迭代协议
#在for循环时先找__iter__方法如果没有就
#迭代器协议-内部含有next方法和__init__方法的就是迭代器
print(__iter__ in dir([].__iter__()))from collections import Iterable
from collections import Iteratorprint(isinstance([],Iterator)) #isinstace判断是否是。迭代器迭代类型。列表不是迭代器但是可迭代。
print(isinstance([],Iterable))class A:# def __init__(self):passdef __next__(self):pass #同时有next和init就是迭代器。next可以一个一个获取值# def __iter__(self):pass #有iter就可用被迭代aA()
print(isinstance(a,Iterable))
print(isinstance(a,Iterator))#只要是迭代器一定可迭代可迭代的不一定是迭代器
#可迭代的.__init__()方法可以得到一个迭代器 三、作用 使用迭代器的好处是可以节省内存空间 #用迭代器的好处从容器类型中一个一个的取值会把所有值都取到
# 可以节省内存空间迭代器并不会再占用一大块内存而是随着循环每次生成一个每次next给一个
#range,文件句柄
#range-
print(range(100000000)) #range(0, 100000000) 得到可迭代对象但此时并没有生成数据
print(list(range(10000000000000))) #内存错误
print(list(range(10))) #[0,1,2,……9]#fopen -#没有for循环依然可以遍历
l[1,2,3,4]
iteratorl.__iter__()
while True:print(iterator.__next__())#虽然会报错但是也一个个输出了 最后抛出StopIterator 四、总结 1.双下方法很少直接调用的方法一般通过其他语法触发。 2.可迭代的——可迭代协议含有__iter__的方法‘__iter__ in dir(数据)) 3.可迭代的一定可以被for循环 4.迭代器协议含有__iter__方法和__next__方法 5.迭代器一定可迭代可迭代的通过调用__iter__方法可以得到一个迭代器 6.迭代器的特点 1方便使用且只能取所有的数据取一次。下次重新取。 2节省内存空间当前和取下一个数据转载于:https://www.cnblogs.com/lowislucifer/p/10993694.html