python迭代器 生成器

2021-09-25 11:38:46 字數 2189 閱讀 4224

1、迭代器

#迭代器,有兩個bif:1、iter():對乙個容器物件呼叫iter()可以得到他的迭代器;2、next():迭代器返回下乙個值

#兩個魔法方法:__inter__() __next__()

for each in

'luffy'

:#'luffy'為乙個容器物件

print

(each)

'''***********************************lu

ff0y0

'''dic=

for xyz in dic:

print

('%s -> %s'

%(xyz,dic[xyz]))

'''*************************==

luffy -> op

chopper -> doctor

zoro -> sword

'''

string=

'luffy'

#容器物件

one=

iter

(string)

#one即為乙個迭代器

while

true

:try

: each=

next

(one)

except

:print

('迭代完畢'

)break

print

(each)

'''********************====lu

ffy迭代完畢

''''''

#使用魔法方法重寫,可獲得想要的效果

class fibs: #斐波那契

def __init__(self):

self.a=0

self.b=1

def __inter__(self): #返回自身

return self

def __next__(self):

self.a,self.b=self.b,self.a+self.b

return self.a

fibs=fibs()

for i in fibs:

if i<20:

print(i)

else:

break

'''

2、生成器

#***************生成器***************====

#生成器其實是特殊的迭代器

defluffy()

:print

('生成器'

)yield

1#yield,相當於普通函式的return,但是retrun返回後函式結束,而yield返回後會使程式暫停

#下一次執行時,會從下一步開始執行

yield

2onep=luffy(

)print

(next

(onep)

)#輸出1,下一次執行從 yield 2 開始

print

(next

(onep)

)#輸出2,再次執行會報錯

#**********===for可以自動呼叫next方法,探測報錯*****=

for i in luffy():

#容器物件為luffy(),不是onep()

print

(i)#全部輸出

#**********====生成器表示式**********===

#生成器表示式和生成器函式都能夠得到生成器物件

#列表推導式

x=[i for i in

range(50

)ifnot(i%3)

and i%2]

#輸出0-50中能被3整除不能被2整除的數,當滿足條件時,才能進入for迴圈。not(i%3)為真,且i%2為真(即餘數不為0)

#for前面是要被輸出的數

print

(x)#[3, 9, 15, 21, 27, 33, 39, 45]

#字典推導式

y=print

(y)#

z=#for前面為布林型別,故輸出為布林型別

print

(z)'''

''''

#還有集合推導式,元組推導式等等

Python 迭代器 生成器

可以直接作用於for迴圈的物件,統稱為可迭代物件 iterable。iterator物件表示的是乙個資料流,iterator物件可以被next 函式呼叫並不斷返回下乙個資料,直到沒有資料時丟擲stopiteration錯誤。可以把這個資料流看做是乙個有序序列,但我們卻不能提前知道序列的長度,只能不斷...

python 迭代器,生成器

什麼事迭代 可直接用作與for迴圈的物件統稱為可迭代物件 可以被next 函式呼叫,並不斷返回下乙個值的物件稱為迭代器,所有的iterable均可以通過內建函式iter 來轉變為iterator。對於迭代器來講,有乙個next 就夠了。在你使用for和in語句時,程式就會自動呼叫即將被處理的物件的可...

python 迭代器 生成器

知識背景 1 呼叫乙個普通的python函式時,一般是從函式的第一行 開始執行,結束於return語句 異常或者函式結束 可以看作隱式的返回none 2 一旦函式將控制權交還給呼叫者,就意味著全部結束。函式中做的所有工作以及儲存在區域性變數中的資料都將丟失 3 再次呼叫這個函式時,一切都將從頭建立。...