python學習日記:day13------叠代器與生成器
阿新 • • 發佈:2018-01-02
就是 元素 獲取值 空間 for stat name 監聽 dir 一、導入
1,dir功能
print(dir([]))告訴我這個列表擁有的所有方法
帶著雙下劃線的方法叫做雙下方法。
2,一個列表執行了_iter_()之後的返回值就是一個叠代器
3,_length_hint_元素個數
4,_setstate_從指定位置取值
5,[]._iter_()叠代器---->_next_通過next就可以從叠代器中一個一個的取值
6、叠代器中的_next_()方法 可以一個一個的獲取值
二、叠代器概念
叠代器協議:內部含有_next_和 _iter_方法的就是叠代器
三、可叠代的
可叠代協議 :只要含有 _iter_方法的都是可叠代的(都能被for循環)
四、可叠代的—>叠代器
可叠代的+._iter_()方法就可以得到一個叠代器
五、for循環與叠代器
for循環就是在使用叠代器
只有是可叠代對象的時候 才能用for
當我們遇到一個新的變量,不確定能不能for循環的時候,就判斷它是否可叠代。
六、叠代器的好處:
#從容器類型中一個一個的取值,會把所有的值都取到
#可以節省內存空間
#叠代器並不會在內存中再占用一個大塊內存,而是隨著循環每次生成一個,每次next每次給我一個
七、生成器
1,生成器的本質是叠代器
2,生成器函數
def generator(): print(‘1‘) yield ‘a‘ ret=generator () print(ret)
只要含有yield的關鍵字函數都是生成器函數,且yield與return不能共用且需要寫在函數內部
#只要是生成器函數:執行之後會得到一個生成器作為返回值。
def generator(): print(1) yield ‘a‘ #生成器函數:執行之後會得到一個生成器作為返回值 ret = generator() print(ret) print(ret._next_())
def wahaha(): for i in range(20000): yield ‘娃哈哈%s‘%i
3,監聽文件的輸入
def tail(filename):
f =open(‘file‘,encoding =‘utf-8‘) while True: line = f.readline() if line.strip(): yield line.strip() g = tail (‘file‘) for i in g: if ‘python‘ in i : print(i)python學習日記:day13------叠代器與生成器