Python中的迭代器與生成器
阿新 • • 發佈:2018-11-25
Python中的迭代器與生成器介紹
一、迭代器iterator
迭代器是訪問可迭代物件的工具。
迭代器是指用iter(obj)函式返回的物件
迭代器是可以用next(it)函式獲取可迭代物件的資料
1、迭代器函式 iter()與next()
iter(iterable)從可迭代物件中返回一個迭代器,iterable必須是 能提供一個迭代器的物件 next(iterable) 從迭代器iterator中獲取下一個記錄,如果無法獲 取下一條記錄,則觸發StopIterator異常 說明: ①迭代器只能往前取值,不會後退 ②用iter函式可以返回一個可迭代物件的迭代器 示例: >>> L = [1,3,5,7] >>> it = iter(L) #讓L提供一個能訪問自己的迭代器 >>> next(it) 1 >>> next(it) 3 2、迭代器的用途: 可以依次訪問可迭代物件的資料(可代替迴圈遍歷) 示例:>>> L = [1,23,45,6] >>> it = iter(L) >>> while True: try: x = next(it) print(x) except StopIteration: break
二、迭代工具函式:
作用是生成一個個性化的可迭代物件 函式: zip(iter1 [,iter2[....]]) 返回一個zip物件,此物件用於生成元組,此元組的每個資料來源於引數中的可迭代 物件,當最小 的可迭代物件不再提供資料時迭代結束 enumerate(iterable [,start]) 生成帶索引的列舉物件,返回的迭代型別為索引-值對(index- value),預設索引 從0 開始,也可用 start指定 zip示例:>>> numbers = [10086,10000,10010,95588] >>> names = ['中國移動','中國聯通','中國電信'] >>> for t in zip(numbers,names): print(t) (10086, '中國移動') (10000, '中國聯通') (10010, '中國電信') enumerate示例: >>> names = ['中國移動','中國電信','中國聯通'] >>> for t in enumerate(names): print(t) (0, '中國移動') (1, '中國電信') (2, '中國聯通') >>> for t in enumerate(names,101): print(t) (101, '中國移動') (102, '中國電信') (103, '中國聯通')
Python中的迭代器與生成器介紹
一、迭代器iterator
迭代器是訪問可迭代物件的工具。
迭代器是指用iter(obj)函式返回的物件
迭代器是可以用next(it)函式獲取可迭代物件的資料
1、迭代器函式 iter()與next()
iter(iterable)從可迭代物件中返回一個迭代器,iterable必須是 能提供一個迭代器的物件 next(iterable) 從迭代器iterator中獲取下一個記錄,如果無法獲 取下一條記錄,則觸發StopIterator異常 說明: ①迭代器只能往前取值,不會後退 ②用iter函式可以返回一個可迭代物件的迭代器 示例: >>> L = [1,3,5,7] >>> it = iter(L) #讓L提供一個能訪問自己的迭代器 >>> next(it) 1 >>> next(it) 3 2、迭代器的用途: 可以依次訪問可迭代物件的資料(可代替迴圈遍歷) 示例:>>> L = [1,23,45,6] >>> it = iter(L) >>> while True: try: x = next(it) print(x) except StopIteration: break
二、迭代工具函式:
作用是生成一個個性化的可迭代物件
函式:
zip(iter1 [,iter2[....]])
返回一個zip物件,此物件用於生成元組,此元組的每個資料來源於引數中的可迭代 物件,當最小 的可迭代物件不再提供資料時迭代結束
enumerate(iterable [,start])
生成帶索引的列舉物件,返回的迭代型別為索引-值對(index- value),預設索引 從0 開始,也可用 start指定
zip示例:>>> numbers = [10086,10000,10010,95588]
>>> names = ['中國移動','中國聯通','中國電信']
>>> for t in zip(numbers,names):
print(t)
(10086, '中國移動')
(10000, '中國聯通')
(10010, '中國電信')
enumerate示例:
>>> names = ['中國移動','中國電信','中國聯通']
>>> for t in enumerate(names):
print(t)
(0, '中國移動')
(1, '中國電信')
(2, '中國聯通')
>>> for t in enumerate(names,101):
print(t)
(101, '中國移動')
(102, '中國電信')
(103, '中國聯通')
三、生成器Generator
生成器是指能夠動態提供資料的物件,生成器物件也是可迭代物件
生成器有兩種:
生成器函式
生成器表示式
生成器函式的定義:
含有yield語句的函式是生成器函式 ,此函式被呼叫將返回一個生成器物件
yield翻譯為產生(或生成)
yield 語句:
語法:
yield 表示式
說明:
yield 用於def函式中,目的是將此函式作用生成器函式使用
yield用來生成資料,共迭代器和next(it)函式使用
生成器函式的說明:
生成器函式的呼叫將返回一個生成器物件,生成器物件是一個可迭代物件,通常用來動態生成資料
生成器函式呼叫return語句會觸發一個StopIteration異常
**推導式建立生成器
L = [x*x for x in range(10)] #生成一個列表
g = (x*x for x in range(10)) #生成一個生成器
可以利用遍歷去除生成器的元素,也可以利用__next__()來逐個取出。