迭代器和生成器

2022-09-13 03:27:13 字數 1651 閱讀 6922

可迭代物件

可迭代物件:有__iter__()方法的物件,呼叫該方法返回迭代器物件

例如:str、list、tuple、dict、set、range()、file、迭代器物件、enumerate、生成器

迭代器物件

可迭代物件通過__iter__()方法得到迭代器物件,例如:

.__iter__()

{}.__iter__()

().__iter__()

迭代器物件:有__next__()方法的物件,也就是用該方法一次從迭代器物件中獲得乙個值,取出乙個少乙個

例如:file、enumerate()、生成器

優缺點:迭代器取值可以不依賴索引完成取值,但是不能計算長度,也不能指定位置取值(只能從前往後逐一取值)

重點:①從迭代器物件中取值,取乙個少乙個,如果要從又開始取,,需要重新獲得擁有所有元素的迭代器物件

②迭代器物件也有__iter__()方法,呼叫後等得到的是自己本身(當前含義幾個元素,得到的就只有幾個元素的迭代器物件)

for迴圈迭代

1.自動獲取別迭代物件的迭代器物件

2.在內部一次一次呼叫__next__()方法取值

3.自動完成異常處理,例子如下

iter_obj=[1,2,3].__iter__()

while true:

try:   #如果有異常操作,接收

ele = iter_obj.__next__() 

print(ele)

except stopiteration:     #stopiteration為錯誤型別,當報錯時,執行下面**塊

# print("取完了")

break

4.for取值例子如下

for ele in st1:   # 1.自動完成 for ele in st1.__iter__(): 2.自動完成異常處理

print(ele)

生成器

生成器:包含有yield關鍵字的函式就是生成器

def my_generator():

yield 1

yield 2

yield 3

g_obj = my_generator()

my_generate()並不會執行函式體,得到的返回值就是生成器物件,生成器物件就是迭代器物件。(函式的返回type型別就是generator)

r1 = g_obj.__next__()   # 1,函式內執行一次,在遇到下乙個yield的時候停止,且拿到yield的返回值

for v in g_obj:

print(v)    # 2 | 3,生成器也可以被for迭代,因為生成器也是乙個迭代器物件

生成器的傳送資訊

def fun():

r1=yield 1000

print(r1)    #接收send發出的資訊後,r1變成了資訊1

yield 2000

obj=fun()

r1=obj.__next__() #走到第乙個yield後停止,返回1000

print(r1) #  輸出為1000

r1=obj.send('資訊1')

print(r2)  #2000

生成器和迭代器

可以直接作用於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...