迭代器

#只要是能被for循环的数据类型 就一定拥有__iter__方法
#print([].iter())
#一个列表执行了__iter__()之后的返回值就是一个迭代器

print(dir([]))
print(dir([].__iter__()))
print(set(dir([].__iter__())) - set(dir([])))
print([1,'a','bbb'].__iter__().__length_hint__())  #元素个数
l = [1,2,3]
iterator = l.__iter__()
print(iterator.__next__())
print(iterator.__next__())
print(iterator.__next__())
print(iterator.__next__())

#Iterable 可迭代的 – > iter #只要含有__iter__方法的都是可迭代的
#[].iter() 迭代器 – > next #通过next就可以从迭代器中一个一个的取值

#只要含有__iter__方法的都是可迭代的 —— 可迭代协议

print('__iter__' in dir( [].__iter__()))
print('__next__' in dir( [].__iter__()))
from collections import Iterable
from collections import Iterator
print(isinstance([],Iterator))
print(isinstance([],Iterable))

#解释迭代器的概念函数

class A:
    # def __iter__(self):pass
    def __next__(self):pass

a = A()
print(isinstance(a,Iterator))
print(isinstance(a,Iterable))



迭代器的概念

#迭代器协议 —— 内部含有__next__和__iter__方法的就是迭代器
#迭代器协议和可迭代协议
#可以被for循环的都是可迭代的
#可迭代的内部都有__iter__方法
#只要是迭代器 一定可迭代
#可迭代的.iter()方法就可以得到一个迭代器
#迭代器中的__next__()方法可以一个一个的获取值

#for循环其实就是在使用迭代器
#iterator
#可迭代对象
#直接给你内存地址
print([].iter())
print(range(10))

#for
#只有 是可迭代对象的时候 才能用for
#当我们遇到一个新的变量,不确定能不能for循环的时候,就判断它是否可迭代

for i in l:
    pass
iterator = l.__iter__()
iterator.__next__()

#迭代器的好处:
#从容器类型中一个一个的取值,会把所有的值都取到。
#节省内存空间
#迭代器并不会在内存中再占用一大块内存,
#而是随着循环 每次生成一个
#每次next每次给我一个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值