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 再次呼叫這個函式時,一切都將從頭建立。...