迭代器和生成器

2021-08-23 14:43:47 字數 2437 閱讀 5232

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 生成器

#生成器——本質是迭代器,自己寫的。

#生成器函式——本質上就是我們寫的函式。

def

generator():

⑥print

(i)  

#return 'a' #yield與return不共用,yield只能在函式內部

⑦yield'a

' #只要含有yiled關鍵字的函式都是生成器函式

③ret =②generator()

④print

(ret)

⑤print(ret.__next__())

#生成器函式:執行之後會得到乙個生成器作為返回值(不執行函式,直接返回生成器)直到⑤是才觸發函式。

def

wahaha():

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():

print

(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時,迭代器應返回其下乙個值。如果迭代器沒...