012_迭代器

1,可迭代对象
    list dic str set tuple f=open() range() enumrate
2,dir()查看一个数据类型的全部方法
print(dir([]))
3,双下方法
    是能够用特殊符号引用的方法
print([1].__add__([2]))     #>>>[1, 2]
print([1]+[2])      #>>>[1, 2]      #这个其实执行的就是上面的代码
4,Iterable 可迭代的 __iter__
    只要是能被for循环的数据类型,就必定拥有 __iter__方法,便可迭代
print('__iter__' in dir(list))    #>>>True  #判断是否可迭代
5,一个列表执行了 __iter__()以后的返回值就是一个迭代器
 print([].__iter__())
6,找迭代器独有的方法
print(dir([]))      #[]不是迭代器
print(dir([].__iter__()))  #[].__iter__()是迭代器
print(set(dir([].__iter__())) - set(dir([])))  #求差集,找到迭代器独有的方法
print([1, 'a', 'ab'].__iter__().__length_hint__())  #元素个数
后两个结果:
{'__length_hint__', '__setstate__', '__next__'}
3
#方法说明:
'__length_hint__' ————>元素个数
'__setstate__' ————>指定迭代开始位置
'__next__' ————>取下一个值
7,迭代一个列表
lis = [1, 2, 3]
iterator = lis.__iter__()   #迭代器
print(iterator.__next__())  #依次取值
print(iterator.__next__())
print(iterator.__next__())
print(iterator.__next__())  #超出范围报错

8,python

  • iterable 的迭代的 ————>__iter__ #只要含有__iter__方法的都是可迭代的
  • [].__iter__()迭代器 —————>__next__ #经过next就能够从迭代器中一个一个的取值
  • 只要含有__iter__方法的都是可迭代的————>可迭代协议
  • 迭代器协议————内部含有__next__和__iter__方法的就是迭代器
9,isinstance(被判断,是什么) 是判断是否是那个东西
from collections import Iterable
from collections import Iterator
print(isinstance([],Iterator))
print(isinstance([],Iterable))
10,迭代器的概念:
    可迭代协议:只要含有__iter__方法的可是可迭代的
    迭代器协议:内部含有__iter__和__next__方法的就是迭代器
  注:
    ①能够被for循环的都是可迭代的
    ②可迭代的内部都有__iter__方法
    ③只要是迭代器就必定可迭代
    ④可迭代的__iter__()方法就可获得一个迭代器
    ⑤__next__()可获取迭代器一个一个的值
    ⑥for循环实际上就是再使用迭代器
11,for循环
    只要是可迭代对象的时候才能用for
    当咱们遇到一个未知的变量,不能肯定能不能for循环时,就判断它是否可迭代
   11.1,for循环的执行本质:
       for i in L:
     pass
       至关于:第一步:iterator = L.__iter__()
     第二步:iterator.__next__()
    11.2,模拟一个for迭代器
    
lis = [1,2,3,4]
iterator = lis.__iter__()
while True:
    print(iterator.__next__())
12,迭代器的好处
    ①很方便使用,且只能取全部的数据一次
    ②从容器类型中一个一个的取值,会把全部的值都取到
    ③能够节省内存空间,迭代器并不会在内存中占用一大块内存,而是随着循环每次生成一个
相关文章
相关标签/搜索