課前知識點:
1、dir() 告訴我列表(或者其他)的所擁有的方法
2、__iter__:只要是能被for迴圈的資料型別,就一定擁有__iter__方法
3、迭代器:乙個列表執行了__iter__()之後的返回值就是乙個迭代器
4、iterable:可迭代的,只要含有__iter__方法就是可迭代的
迭代器的概念:
1、內部含有__next__和__iter__的就是迭代器------------迭代器協議
2、可迭代協議:
可以用for迴圈的都是可迭代的
可迭代的內部都有__iter__方法
只要是迭代器,就一定可迭代
3、【可迭代的】.__iter__方法就可以得到乙個迭代器
迭代器中的__next__方法可以乙個乙個的獲取值
4、for 迴圈其實就是在使用迭代器
iterator :迭代器
5、關於for:只有是可迭代物件的時候,才能用for
當我們遇到乙個新的變數,不確定能不能用for迴圈的時候,就判斷它是否可以迭代
l=[1,2,3,4,5,6]for i in l:
pass
iterator=l.__iter__() #iterator是l用__iterator
while true:
print(iterator.__next__())
6、迭代器的好處:
從容器型別中乙個乙個的取值,會把所有的值都取到。
節省記憶體空間:迭代器並不會在記憶體中再占用一大塊
記憶體,而是隨著迴圈,每次生成乙個,每次next迴圈每次給乙個值。
1、只要是含有yield關鍵字的函式都是生成器函式
yield不能和return 公用且需要寫在函式內
defaaa():
print(222)
yield 111ret=aaa() #
ret 是執行之後返回得到的生成器
(ret)
print(ret.__next__())
2、含有yield ,在執行之後會得到乙個生成器作為返回值
3、
#娃哈哈%i
defwahaha():
for i in range(2000000):
yield
'娃哈哈%s
'%i #使用yield,執行之後返回值是乙個生成器函式
g =wahaha()
count =0 #計數功能:在執行50次之後停止
for i in
g: #對 g 生成器進行迴圈
count +=1
(i)
if count > 50:
break #50次之後停止
#print('*******',g.__next__()) #停止之後執行__next__:繼續執行上一次50次停止的函式
#說明生成器是一次一次執行的
for i in
g: #繼續迴圈執行生成器,還是接著上次執行:還是說明
count +=1 #生成器是一次一次執行的
(i)
if count > 100:
break
生成器 迭代器
最近見天一直在看廖大的python教程,卻發現很多基礎看著很簡單,但卻不會應用,歸根結底還是因為理解不到位,故而又將教程學了一遍,並將自己的理解記錄一下,也方便後面查閱。由於沒有相關程式設計基礎,有些理解可能是錯的,敬請批評指正。想深入具體學習廖大部落格請移步廖雪峰的官方 有時候用迴圈生成列表太過繁...
迭代器,生成器
迭代器 生成器 生成器的第1種實現方式 列表生成式改為生成器 python中yield關鍵字 函式中如果有yield,那麼呼叫這個函式的返回值為生成器。當生成器g呼叫next方法,執行函式,知道遇到yield就停止 再執行next,從上一次停止的地方繼續執行 函式中遇return直接退出,不繼續執行...
迭代器 生成器
迭代器 iter 可迭代物件 下乙個元素的值 next 可迭代物件 類中實現 iter 方法 提供迭代器 實現迭代器 import time class mylistiter object 迭代器類 def init self,data self.data data self.index 0 def...