一、迭代器
1、可迭代物件——iterable
(1)判斷是否可迭代的方法:
from collections import iterable常見的可迭代物件有:字串、列表、元組、字典、集合、檔案控制代碼、range()print(isinstance('aaa',iterable) #輸出結果:true
print(isinstance(123,iterable) #輸出結果:false
print(isinstance([1,2,3],iterable) #輸出結果:true
(2)可迭代協議
包含『__iter__'方法的資料型別就是可迭代的。輸出資料型別所有方法的方式如下:
#例項:求出兩個不同資料型別的方法的不同2、迭代器——iteratordifference=set(dir([1,2,3]))-set(dir(123)) #dir()方法以列表形式列出資料的所有的方法
print(diffenrence)
(1)判斷迭代器的方法
from collections import iterator(2)迭代器協議iterator_lst=[1,2,3].__iter__()
print(isinstance(itertor_lst,iterator) #輸出結果為:true
print(isinstance([1,2,3],iterator) #輸出結果為:false
迭代器中有'__next__'和'__iter__'方法
(3)常見迭代器
a.先天的:檔案控制代碼;b後天的:從可迭代物件轉變,格式為:「可迭代物件.__iter__()」
(4)迭代器取值
lst_iterator=[1,2,3].__iter__()(5)優點print(lst_iterator.__next__()) #輸出結果為:1
print(lst_iterator.__next__()) #輸出結果為:2
print(lst_iterator.__next__()) #輸出結果為:3
#超過迭代器中的內容就會報錯:stopiterator
a.能對python資料型別進行遍歷,不關心每乙個值;b.可以節省空間:惰性計算
3、二者的區別
(1)可迭代物件包含迭代器;(2)迭代器=可迭代物件.__iter__();(3)可以對可迭代物件和迭代器進行迴圈
二、生成器
1、定義:生成器就是迭代器,生成器是我們自己寫出來的
2、生成器函式:帶有關鍵字yield/yield from的函式就稱為生成器函式
(1)生成器函式在執行時候只返回乙個生成器,不執行生成器函式中的內容
def generator():b.for迴圈取值print(123)
yield 』aaa『
g=generator()
(2)從生成器中取值
a.生成器.__next__():生成器函式中有幾個yield,就可以取幾次
def generator():
print(123)
yield 'aaa'
print(456)
yield 'bbb'
g=generator()
print(g.__next__()) #輸出結果:123 aaa
print(g.__next__()) #輸出結果:456 bbb
def generator():
print(123)
yield 'aaa'
print(456)
yield 'bbb'
print(generator().__next__()) #輸出結果:123 aaa
print(generator().__next__()) #輸出結果:123 aaa
注意:前者為建立乙個生成器,後者為每次重新建立乙個生成器
#例項1:def generator():
print(123)
yield 'aaa'
print(456)
yield 'bbb'
g=generator()
for i in g:
print(i)
#例項2:c. list(生成器函式) 返回乙個列表,裡面裝著生成器中的所有內容def generator():
for i in range(1,50000):
yield i
g=generator()
for j in g:
print(j)
if j==555:
break
def generator():三、生成器例項yield 'aaa'
yield 'bbb'
g=generator()
print(list(g)) #輸出結果為:[aaa,bbb]
1、yield from例項
def generator():2、監控檔案中寫入的內容yield from [1,2,3]
yield from 'abc'
g=generator()
for i in g:
print(i)
****************************************等價於*****************************************
def generator():
for i in [1, 2, 3]:
yield i
for j in 'abc':
yield j
g = generator()
for i in g:
print(i)
import timedef generator(filename):
f=open(filename,encoding='utf-8')
f.seek(0,2)
while true:
line=f.readline()
if not line:
time.sleep(0.1)
continue
yield line
g=generator('demo')
for line in g:
print(line,end='')
生成器和迭代器
可以直接作用於for迴圈的物件稱為可迭代物件 iterable.可以用isinstance 判斷乙個物件是否是iterable物件。isinstance iterable true isinstance iterable true isinstance 235,iterable false 而生成器...
迭代器和生成器
1 迭代器的概念 print dir 告訴我列表的所有用法 有雙下劃線的所有方法叫做雙下方法,是c語言已經寫好的方法。你可以用不止一種方法呼叫它。列表的用法變集合 set dir 求交集 set dir set dir set dir 求列表,字典,字串它們的用法的交集 他們共同的用法 iterab...
生成器和迭代器
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...