1 迭代器的概念
print(dir()) # 告訴我列表的所有用法
#有雙下劃線的所有方法叫做雙下方法,是c語言已經寫好的方法。你可以用不止一種方法呼叫它。
#列表的用法變集合 set (dir())
#求交集 set(dir())&set(dir({}))&set(dir('')) 求列表,字典,字串它們的用法的交集(他們共同的用法)
# iterable adj 可迭代的 iterater 迭代器
# print('__iter__' in dir(set)) 結果是 true 就是可迭代的
1,只要能被for迴圈的資料型別就一定擁有__iter__(可迭代的)方法
2,乙個列表執行了__iter__()之後的迴圈值就是乙個迭代器
3,__iter__() 迭代器
4,__next__ 通過next就可以從迭代其中乙個乙個取值。
5,只要含有__iter__()方法都是可迭代的——可迭代協議
6,內部含有__next__()和__iter__()方法就是迭代器——迭代器協議
#print(isinstance(,intable)) 判斷列表是不是intable
1,迭代器一定是可迭代的,但可迭代的不一定是迭代器
2,可迭代的.__iter__()方法就可以得到乙個迭代器
3,迭代器中的__next__()方法可以乙個乙個的獲取值
4,for迴圈實際就是在使用迭代器
# iterator 可迭代物件
#直接給你記憶體位址,需要自己判斷是不是迭代器
#for
1,只有是可迭代的物件的時候,才能用for
2,當我們遇到乙個新的變數,不確定能不能用for迴圈的時候,就判斷它是否可迭代,看他內部有沒有__iter__()方法
#迭代器的好處
1,方便,從容器型別中乙個乙個的取值,會把所有的值都取到
2,節省記憶體空間。
並沒有生成資料,而是現實有這些東西。
迭代器並不會在記憶體中在佔2一大塊記憶體,而是隨著迴圈,麼次生成乙個。每次next,每次給乙個
2 生成器
#生成器——本質是迭代器,自己寫的。
#生成器函式——本質上就是我們寫的函式。
①defgenerator():
⑥print
(i)
#return 'a' #yield與return不共用,yield只能在函式內部
⑦yield'a
' #只要含有yiled關鍵字的函式都是生成器函式
③ret =②generator()
④print
(ret)
⑤print(ret.__next__())
#生成器函式:執行之後會得到乙個生成器作為返回值(不執行函式,直接返回生成器)直到⑤是才觸發函式。
defwahaha():
for i in range(2000000):
yield
'哇哈哈%s
' %i
g =wahaha()
for i in
g :
print(i)
監聽檔案
原始版本deftail(filename):
f = open(filename,encoding = '
utf-8')
while 1:
line =f.reading()
ifline.strip():
(line.strip())
tail(
'file
')
#注意替換,這個替換上面的def tail(filename):
f = open(filename,encoding = 'utf-8')
while 1 :
line = f.reading()
if line.strip():
yield line.strip()
g = tail('file')
for i in g :
print(i)
監聽過濾def tail(filename):
f = open(filename,encoding = 'utf-8')
while 1 :
line = f.reading()
if line.strip():
yield line.strip()
g = tail('file')
for i in g :
if 'python' in i:
print(i)
生成器和迭代器
可以直接作用於for迴圈的物件稱為可迭代物件 iterable.可以用isinstance 判斷乙個物件是否是iterable物件。isinstance iterable true isinstance iterable true isinstance 235,iterable false 而生成器...
生成器和迭代器
1.iterator 迭代器 舉例 我們對list使用for for i in 1,2,3,4 print i 12 34對string物件使用for for ch in python print ch py thon對字典物件使用for for k in print k yx對檔案使用for fo...
迭代器和生成器
迭代器 迭代 iterate 意味著重複多次,就像迴圈那樣。本書前面只使用for迴圈迭代過序列和字典,但實際上也可迭代其他物件 實現了方法iter的物件。方法iter返回乙個迭代器,它是包含next的物件,而呼叫這個方法時可不提供任何引數。當你呼叫方法next時,迭代器應返回其下乙個值。如果迭代器沒...