Python併發編程理解yield from、協程

1、首頁,認識一下可迭代,迭代器和生成器python

可迭代,如:list,dict,tuple,deque等都是可迭代對象;編程

驗證,須要藉助collections.abc這個模塊(python2中沒有)使用isinstance()來類別一個對象是不是可迭代的(Iterable),是不是迭代器(Iterator),是不是生成器(Generator)多線程

代碼以下:import collections函數

       from collections.abc import Iterable.Iterator.Generator線程

#字符串orm

ast="xiaoming"協程

print("字符串:{}".format(ast))對象

print(isinstarnce(ast,Iterable))生命週期

print(isinstance(ast,Iterator))字符串

print(isinstance(alist,Generator))

#列表

alist=[21,24,12,32,19]

print(isinstarnce(alist,Iterable))

print(isinstance(alist,Iterator))

print(isinstance(alist,Generator))

#字典

adict={"name":"王華","gender":"男","age":18}

print(isinstarnce(adict,Iterable))

print(isinstance(adict,Iterator))

print(isinstance(adict,Generator))

#deque

adeque=collections.deque("adbdef")

print("字符串:{}".format(adeque))

print(isinstarnce(adeque,Iterable))

print(isinstance(adeque,Iterator))

print(isinstance(adeque,Generator))

 

 

擴展知識:

可迭代對象,是其內部實現了,__iter__這個魔術方法。能夠經過,dir()方法來查看是否有__iter__來判斷一個變量是不是可迭代的;

迭代器:

對比可迭代對象,迭代器其實就是多了一個函數而已。就是__next__(),咱們能夠再也不使用for循環來間斷獲取元素值。而是能夠直接使用next()方法來實現。

迭代器是在可迭代的基礎上實現的。要建立一個迭代器,咱們首先得有一個可迭代對象。

 

**重點:生成器

生成器的概念是在python2.2中首次出現,之因此引入生成器的概念是爲了實現一個在計算下一個值時不須要浪費空間的結構。生成器是在迭代器的基礎上(可以使用for循環能夠使用next())再實現了yield。

yield是什麼東西呢,它至關於咱們函數裏的return,在每次next()或者for遍歷的時候都會yield這裏將新的值返回回去,並在這裏阻塞,等待下一次的調用。正是因爲這樣的機制,才使用生成器在python編程中大放異彩;

 

生成器的生命週期:

gen_creaated  #等待開始執行

gen_running #解釋器正在執行(只有多線程應用中才能看到這個狀態)

gen_suspended #在yield表達式處暫停

gen_closed #執行結束

 

 

**協程

協程是爲非搶佔式多任務產生子程序的計算機程序組件,協程容許不一樣入口點在不一樣位置暫停或者開始執行程序。

協程經過使用yield暫停生成器,能夠將程序的執行流程交給其餘的子程序,從而實現不一樣子程序的之間的交替執行。

相關文章
相關標籤/搜索