13 Python中的迭代器

2021-08-15 16:58:55 字數 2176 閱讀 2878

迭代器是乙個資料流物件或容器,當使用其中的資料時,每次從乙個資料流中取乙個資料,直到資料被取完,而且資料不會被重複使用;

實現自定義迭代器需要實現如下的方法:

自定義異常示例:

#依次遍歷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...