国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【generator101】 - generator的輸入與輸出

melody_lql / 2708人閱讀

摘要:的是可以有輸入輸出的,這個特性并不廣為人知。也就是要求不返回值,而是拋出給定的異常。執行之后的輸出與前面是一樣的。

Python的generator是可以有輸入輸出的,這個特性并不廣為人知。這其實是一個挺有用的特性,利用其外部可控制執行進度的特性,再加上可以與外部進行輸入輸出,generator可以被用來打造成一個異步執行框架,或者說是協程調度引擎。
我們先來看一個最簡單的例子,generator如何接受外部的輸入

def demo_input_and_output():
    input = yield "please give me a input"
    yield input

gen = demo_input_and_output()
print(gen.next())
print(gen.send("this is your input"))

這段代碼的輸出是

please give me a input
this is your input

其中第一個gen.next()是執行第一個yield,第二個gen.send是給第一個yield一個返回值,也就是外部傳遞給generator的輸入,同時執行第二個yield。我們可以把next()理解為一種特殊情況的send(),也就是給的輸入是None,下面是一段等價的代碼:

def demo_input_and_output():
    input = yield "please give me a input"
    yield input

gen = demo_input_and_output()
print(gen.send(None))
print(gen.send("this is your input"))

輸入除了值之外,還可以是異常。也就是要求yield不返回值,而是拋出給定的異常。

def demo_input_and_output():
    try:
        yield "please give me a input"
    except RuntimeError as e:
        yield e.message

gen = demo_input_and_output()
print(gen.next())
print(gen.throw(RuntimeError, RuntimeError("this is your input")))

執行之后的輸出與前面是一樣的。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/37380.html

相關文章

  • generator101】 - 對比generator和greenlet

    摘要:比如里可以直接把執行權交給,而完全不知情。雖然不能和多線程相比,但是效果是類似的。對于多線程的代碼,是任何一行代碼都可能與其他線程并行。加上協程之間有共享狀態的話,一定程度上會產生類似多線程的并發讀寫狀態的。 前面講generator是顯式的協程的時候缺一個例子,現在補上 def parent_generator(): print(hello) yield from ...

    CoyPan 評論0 收藏0
  • generator101】- generator是可以被外部控制執行進度函數

    摘要:協程是用來處理阻塞和流程阻塞這兩個普世問題的得力工具,可以達到比較好的。這段代碼執行的輸出是通過這個例子,可以了解到的的兩個特性。被調用一次,函數就往前執行一步。通過控制,可以從外面控制函數內部的執行進度。 很多碼農終其一生可能在代碼上干的事情無非就是追求兩件事情:Logic Locality 和 Data Locality。前者決定了開發效率,后者決定了運行效率。協程是用來處理I/O...

    yacheng 評論0 收藏0
  • generator101】 - yield from

    摘要:我們可以看一下的可見是由內部支持的,其實現原理上就避免了棧進棧出的消耗,直接由最內層的返回值。另外可以實現外部直接向最內層的傳遞值,比如這段代碼的輸出是這樣傳值的方式,在用循環重新的模式下是無法實現的。這也就是必須使用,而不能使用的原因。 在python 3.3里,generator新增了一個語法 yield from 這個yield from的作用是什么?看下面兩段對比的代碼: d...

    xiaodao 評論0 收藏0
  • python 學習筆記-列表生成器

    摘要:定義列表生成器有兩種方式,一種是算式列表生成器我起的名字,一種通過關鍵詞。算式列表生成器算式列表生成器雨列表生成式類似,但需要換成。我們可以用一個包含關鍵字的函數來定義一個列表生成器。 通過列表生成式我們可以方便的生成列表。但是在有的時候,我們需要生成的列表非常長,而我們的計算機的內存是有限的。在操作列表的時候,我們往往只是操作了列表的一部分區域的數據。 例如我們需要生成這么一個列表,...

    MyFaith 評論0 收藏0
  • generator101】 - stacklessapi

    摘要:如果說相比來說,是一種隱式的協程的話,提供的就更加隱式了。通過調用可以知道這個鏈表目前的大小。正式因為沒有把底層的協程直接控制接口開放,而是強買強賣了一個,所以想要在像那樣隨心所欲的操縱協程還是頗費一番周折的。 如果說greenlet相比generator來說,是一種隱式的協程的話,stackless python提供的api就更加隱式了。 import stackless def...

    philadelphia 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<