協(xié)程是Tornado中進(jìn)行異步I/O代碼開發(fā)的方法。協(xié)程使用了Python關(guān)鍵字yield將調(diào)用者掛起和恢復(fù)執(zhí)行。所以在學(xué)習(xí)協(xié)程之前,我們先熟悉一下yield的概念和使用方法,而要想理解yield,需要先理解迭代器的概念。
在Python種,使用yield 關(guān)鍵字定義的迭代器也被稱為【生成器】Python種最常用迭代器的場(chǎng)景是循環(huán)語(yǔ)句for,它用迭代器封裝集合,并且煮個(gè)訪問集合元素以執(zhí)行循環(huán)。
例如:
for number in range(5):#range返回一個(gè)列表 print(number)
其中的range()返回一個(gè)包含所指定元素的集合,而for語(yǔ)句將其封裝成一個(gè)迭代器后訪問,使用iter()可以講列表、集合轉(zhuǎn)換成迭代器,例如:
numbers=[1,2,3,4,5] #t就是迭代器 t=iter(numbers) #打印t對(duì)象,以便查看其類型 print(t)
返回結(jié)果:
<list_iterator object at 0x10e805748>
迭代器與普通Python對(duì)象相比,多了一個(gè)__next__()
方法,每次調(diào)用該方法可以返回一個(gè)元素,調(diào)用者(例如for語(yǔ)句)可以通過不斷調(diào)用__next__()
方法來煮個(gè)訪問集合元素。
例如:
numbers=[1,2,3,4,5] #t就是迭代器 t=iter(numbers) #打印t對(duì)象,以便查看其類型 print(t.__next__()) print(t.__next__()) print(t.__next__()) print(t.__next__())
返回結(jié)果:
1 2 3 4
調(diào)用者可以一直調(diào)用__next__()
方法,直到返回StopIteration異常。
迭代器在Python編程種的使用范圍很廣,那么開發(fā)者如何定制自己的迭代器呢?
答案是使用yield關(guān)鍵字。
調(diào)用任何定義包含yield關(guān)鍵字的函數(shù)都不會(huì)執(zhí)行該函數(shù),而是會(huì)獲得一個(gè)隊(duì)?wèi)?yīng)于該函數(shù)的迭代器。
實(shí)例:
import time def demoIternator(): print("---1---") yield 1 print("---2---") yield 2 print("---3---") yield 3 print("---4---") for x in demoIternator(): print(x) time.sleep(1)
每次調(diào)用迭代器的__next__()方法,將執(zhí)行迭代器函數(shù),并返回yield的結(jié)果作為迭代返回元素。
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com