天天看點

python筆記13—day13

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