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,迭代器的好處
    ①很方便使用,且只能取全部的數據一次
    ②從容器類型中一個一個的取值,會把全部的值都取到
    ③能夠節省內存空間,迭代器並不會在內存中佔用一大塊內存,而是隨着循環每次生成一個
相關文章
相關標籤/搜索