>>> a = range(0,10)>>> a
range(0, 10)
>>> it = iter(a) #建立迭代物件
>>> next(it) ## 輸出迭代器的下乙個元素
0>>> next(it)
1>>> for var in it: #迭代物件可以被for迴圈訪問
... print(var)
...234
5678
9
1,迭代器物件可以使用常規for語句進行遍歷:
list=[1,2,3,4]it = iter(list) # 建立迭代器物件
for x in it:
print (x, end=" ")
執行結果:
1 2 3 42,也可以使用 next() 函式:
def myfor(seq):obj = iter(seq) #obj 迭代器: 節約記憶體 抽象的
while true:
try:
var = obj.__next__()
print(var)
except stopiteration:
break
myfor('abc')
執行結果:
abc
cycle: #圈性延伸
2. count: #線性延申的from itertools import cyclefrom time import sleep
a = [1,2,3]
rt = cycle(a)
for var in rt:
sleep(0.5)
print(var)
執行結果:
無限環形迴圈123
from time import sleepfrom itertools import count
rt = count(0, 2)
for var in rt:
sleep(0.5)
print(var)
if var >= 10:
break
執行結果:(步長為2無限延長)
0246810
islice islice(iterable, stop) islice(iterable, start, stop[, step])
from itertools import islicea = [1,2,3,4,5]
rt = islice(a, 3)
for var in rt:
print(var)
執行結果:
123
class mynumber:def __init__(self,a):
self.a = a
def __iter__(self):
self.a = a
return self
def __next__(self):
x = self.a
self.a += 1
return x
myclass = mynumber(1)
print(next(myclass))
print(next(myclass))
print(next(myclass))
執行結果:
123
from time import sleepclass myiter:
def __init__(self,start,step=1):
self.value = start
self.step = step
self.next = start
def __iter__(self):
return self
def __next__(self):
self.value = self.next
self.next = self.value + self.step
return self.value
rt = myiter(0,2)
for var in rt:
sleep(0.5)
print(var)
if var >= 10:
break
執行結果:
0246810
#斐波那契數列import os
class fbnqsl:
def __init__(self,limit):
self.limit = limit
self.curr = 0
self.next = 1
self.value = [self.curr,self.next]
def __next__(self):
value = self.curr + self.next
if value >= self.limit:
raise stopiteration('超出上限') #丟擲異常
self.curr = self.next
self.next = value
return self.value
def __iter__(self):
return self
rt = fbnqsl(100)
for var in rt:
os.system('cls')
print(var)
執行結果:
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
以下例項使用 yield 實現斐波那契數列:import sysdef fibonacci(n): # 生成器函式 - 斐波那契
a, b, counter = 0, 1, 0
while true:
if counter >= n:
raise stopiteration('超出上限')
yield a
a, b = b, a + b
counter += 1
it = fibonacci(10) # it 是乙個迭代器,由生成器返回生成
for var in it:
print(var,end = ' ')
執行結果:
0 1 1 2 3 5 8 13 21 34例項2:
from time import sleepdef pass_():
phone = 18600000000
while true:
if phone < 18600000010:
phone += 1
yield phone #返回而不終止,暫停函式
else:
return #== 手動丟擲了 stopiteration
# raise stopiteration('超出定義的上限')
rt = pass_() #for var in rt:
sleep(0.5)
print(var,end = ' ')
執行結果:
18600000001 18600000002 18600000003 18600000004 18600000005 18600000006 18600000007 18600000008 18600000009 18600000010
31 迭代器與生成器
迭代器 for list tuple dict set 1 什麼是迭代器 器 工具 count 1 while count 3 print count count 1 迭代器 就是一種不依賴於索引的取值工具 2 為何要有迭代器 特性 優點 1 是一種通用的迭代取值方案 2 惰性計算,節省記憶體 缺點...
生成器 迭代器
最近見天一直在看廖大的python教程,卻發現很多基礎看著很簡單,但卻不會應用,歸根結底還是因為理解不到位,故而又將教程學了一遍,並將自己的理解記錄一下,也方便後面查閱。由於沒有相關程式設計基礎,有些理解可能是錯的,敬請批評指正。想深入具體學習廖大部落格請移步廖雪峰的官方 有時候用迴圈生成列表太過繁...
迭代器,生成器
迭代器 生成器 生成器的第1種實現方式 列表生成式改為生成器 python中yield關鍵字 函式中如果有yield,那麼呼叫這個函式的返回值為生成器。當生成器g呼叫next方法,執行函式,知道遇到yield就停止 再執行next,從上一次停止的地方繼續執行 函式中遇return直接退出,不繼續執行...