迭代器

 

# 迭代器
l = [1, 2, 3]
# 索引
# 循环 for
print(dir([]))  # 输出列表拥有的所有方法
print(dir(str))
# 双下划线的方法:双下方法,C语言代码
iter = l.__iter__()  # 迭代器
item = iter.__next__()  # 迭代器的__next__方法,取值
print(item)

# 只要含有__iter__方法的都是可迭代的————可迭代协议
# 迭代器协议 ————内部含有__next__方法和__iter__方法的就是迭代器
# 可以被for循环的都是可迭代的
# 可迭代的内部都有__iter__方法
# 可迭代的.__iter__()方法就可以得到迭代器
# 迭代器中的__next()__()方法可以一个一个获取值
# for循环其实就是在使用迭代器
# 只有是可迭代对象的时候才能用for
# 遇到新的变量,不确定数据类型时,可以通过是否由__iter__()方法知道是否是可迭代对象,就能用for得到

# 迭代器的好处:
    # 从容器中一个一个的取值。
    # 节省内存空间
        # 迭代器不会在内存中占用一大块内存
        # 而是随着循环 每次生成一个
        # 每次next取出一个
print('__iter__' in dir(l.__iter__()))
print('__next__' in dir(l.__iter__()))

from collections import Iterable
from collections import Iterator

print(isinstance([], Iterator))  # isinstance 判断是否是迭代器
print(isinstance([], Iterable))  # isinstance 判断是否可迭代

for i in l.__iter__():
    print(i)

for i in l:
    pass
# iterator = l.__iter__()
# iterator.__next__()
# for循环的本质

print('__next__' in dir(range(100)))
print('__next__' in dir(list(range(100))))

 

posted @ 2020-03-31 15:27  vivagoal  阅读(74)  评论(0)    收藏  举报