1、疊代器
隻要是能被for循環的資料類型 就一定擁有__iter__方法
print('__iter__' in dir(bool))#判斷是否含有__iter__
一個清單執行了__iter__()之後的傳回值就是一個疊代器
l = [1,2,3]
iterator = l.__iter__()#傳回一個疊代器
print(iterator.__next__())#通過疊代器調用清單的元素
print(iterator.__next__())
#Iterable 可疊代的 -- > __iter__ #隻要含有__iter__方法的都是可疊代的
#[].__iter__() 疊代器 -- > __next__ #通過next就可以從疊代器中一個一個的取值
疊代器的概念
疊代器協定 —— 内部含有__next__和__iter__方法的就是疊代器
疊代器協定和可疊代協定
可以被for循環的都是可疊代的
可疊代的内部都有__iter__方法
隻要是疊代器 一定可疊代
可疊代的.__iter__()方法就可以得到一個疊代器
疊代器中的__next__()方法可以一個一個的擷取值
2、生成器
隻要含有yield關鍵字的函數都是生成器函數
yield不能和return共用且需要寫在函數内
def generator():
print(1)
yield 'a'
#生成器函數 : 執行之後會得到一個生成器作為傳回值
ret = generator()
print(ret)
print(ret.__next__())
3、監聽檔案輸入列子(但沒有實作,跟視訊裡的代碼一樣但沒有)
def tail(filename):
f = open(filename,encoding='utf-8')
while True:
line = f.readline()
if line.strip():
yield line.strip()
g = tail('001')
for i in g:
print(i)
轉載于:https://www.cnblogs.com/xiao-le/p/11498769.html