迭代器是乙個資料流物件或容器,當使用其中的資料時,每次從乙個資料流中取乙個資料,直到資料被取完,而且資料不會被重複使用;
實現自定義迭代器需要實現如下的方法:
自定義異常示例:#依次遍歷x的n次方,知道大於100時結束迭代
class
myiterator:
def__init__
(self, x=2, max=100):
self.__x = x
self.__mul = x
self.__max = max
# 定義iter函式,返回自身
def__iter__
(self):
return self
# 定義next函式,制定迭代器的返回值
def__next__
(self):
if self.__x != 0
and self.__x != 1:
self.__mul *= self.__x
if self.__mul <= self.__max:
return self.__mul
else:
raise stopiteration
else:
raise stopiteration
if __name__ == '__main__':
myitor = myiterator()
for i in myitor:
print(i)
執行結果:
4 8
16 32
64
迭代器類一定要在某個條件下引發stopiteration錯誤,以結束遍歷迴圈,否則產生死迴圈。內建函式iter()示例:
def
function
():global x
x += 2
return x
if __name__ == '__main__':
lst = [1, 2, 3, 4]
for i in iter(lst): #iter()函式乙個引數
print(i, end=' ')
print()
x = 0
for i in iter(function, 12): #iter()函式兩個引數
print(i, end=' ')
執行結果:
1 2 3 4
2 4 6 8 10
itertools模組中常見的迭代工具,如下表所示:
分類函式名稱
描述無限迭代
count(start[, step])
從start開始,以step為步長計數迭代
無限迭代
cycle(seq)
無限迴圈迭代seq
無限迭代
repeat(elem[, n])
迴圈迭代elem
迭代短序列
chain(p, q, …)
鏈結迭代,將p,q…鏈結起來迭代,就像從乙個序列中迭代
迭代短序列
compress(data, selectors)
依據selectors中的值選擇迭代data序列中的值
迭代短序列
dropwhile(pred, seq)
當pred對序列元素處理結果為假時開始迭代seq後的值
迭代短序列
filte***lse(pred, seq)
當pred處理為假的元素
迭代短序列
takewhile(pred, seq)
與dropwhile相反
迭代短序列
tee(it, n)
將it重複n次進行迭代
組合迭代序列
product(p, q, …[, n])
迭代排列出所有的序列
組合迭代序列
permutations(p, r)
迭代序列中r個元素的排列
組合迭代序列
combinations(p, r)
迭代序列中r個元素的組合
13 Python裝飾器(一)
一 在python中函式也可以作為另乙個函式的引數,不限制是字串 陣列 集合 數字等。下面看乙個例子 coding utf 8 def sum x,y return x y def sub x,y return x y def test fun,x,y return fun x,y print su...
13 Python 裝飾器 偏函式
裝飾器 原函式 def now print 2019 01 10 print now.name 增加原函式的功能 def log func print call s func.name return func args,kw log def new print 2019 01 10 呼叫new函式時...
1 3 Python語法初探
input輸入 螢幕輸入 input 的小括號中放入的是,提示資訊,用來在獲取資料之前給使用者的乙個簡單提示 input 在從鍵盤獲取了資料以後,會存放到等號右邊的變數中 input 會把使用者輸入的任何值都作為字串來對待 str input 請輸入 請輸入 這裡是輸入完 直接的輸出 str inp...