day13 迭代器

目錄

一、可迭代協議

二、迭代器協議


一、可迭代協議

只要含有__iter__方法的都是可迭代的

dir():不帶參數時,返回當前範圍內的變量、方法和定義的類型列表;帶參數時,返回參數的屬性、方法列表  

print(dir([]))  # 打印列表擁有的所有方法
print(dir({}))  # 打印字典擁有的所有方法
print(dir(''))  # 打印字符串擁有的所有方法
print(dir(range(10)))  # 打印range(10)擁有的所有方法

可以for循環的: str、list、 tuple dict 、set、 f=open()[文件句柄]、 range()、 enumerate() 

只要是能被for循環的數據類型,就一定擁有__iter__方法

print('__iter__' in dir(int))    # False
print('__iter__' in dir(bool))   # False
print('__iter__' in dir(list))   # True
print('__iter__' in dir(dict))   # True
print('__iter__' in dir(set))    # True
print('__iter__' in dir(tuple))  # True
print('__iter__' in dir(enumerate([])))  # True
print('__iter__' in dir(range(1)))   # True

二、迭代器協議

 內部含有__next__ 和 __iter__方法的就是迭代器

一個列表執行了__iter__()方法之後的返回值就是一個迭代器
print([].__iter__())  # <list_iterator object at 0x000001FD427B67F0>
print(set(dir([].__iter__())) - set(dir([])))  # {'__length_hint__', '__next__', '__setstate__'}
l = [1,2,3]

iterator = l.__iter__()
print(iterator.__next__())  # 1
print(iterator.__next__())  # 2
print(iterator.__next__())  # 3
print('__iter__' in dir( [].__iter__()))  # True
print('__next__' in dir( [].__iter__()))  # True
from collections import Iterable
from collections import Iterator


print(isinstance([],Iterator))  # Flase
print(isinstance([],Iterable))  # True
可以被for循環的都是可迭代的
可迭代的內部都有__iter__方法
只要是迭代器一定可迭代
可迭代的調用"__iter__()"方法就可以得到一個迭代器   例如:[].__iter__()
迭代器中的__next__()方法可以一個一個的獲取值

for循環
只有是可迭代對象的時候才能用for
當我們遇到一個新的變量,不確定能不能for循環的時候,就判斷它是否可迭代

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章