您所在的位置:

首頁>科技>

正文

Python 的關鍵字 yield 有哪些用法和用途?

發布時間:2020-02-05 18:18:05

yield 的用法有以下四種常見的情況:一個是生成器,二是用于定義上下文管理器,三是協程,四是配合 from 形成 yield from 用于消費子生成器并傳遞消息。這四種用法,其實都源于 yield 所具有的暫停的特性,也就說程序在運行到 yield 所在的位置 result = yield expr 時,先執行 yield expr 將產生的值返回給調用生成器的 caller,然后暫停,等待 caller 再次激活并恢復程序的執行。而根據恢復程序使用的方法不同,yield expr 表達式的結果值 result 也會跟著變化。如果使用 __next()__ 來調用,則 yield 表達式的值 result 是 None;如果使用 send() 來調用,則 yield 表達式的值 result 是通過 send 函數傳送的值。下面是官方文檔介紹 yield 表達式時的一個例子[1],能夠很好地說明關鍵字 yield 的特性和用法:

gt;gt;gt; def echo(value=None):... print("Begin...")... try:... while True:... try:... value = (yield value)... except Exception as e:... value = e... finally:... print("Clean up!!!")...gt;gt;gt; generator = echo(1)gt;gt;gt; print(next(generator))Begin...1gt;gt;gt; print(next(generator))Nonegt;gt;gt; print(generator.send(2))2gt;gt;gt; generator.throw(TypeError "spam")TypeError(spam)gt;gt;gt; generator.close()Clean up!!!

上面這段代碼的說明如下圖所示:

執行第一個 next(generator) 的時候,也就是預激活生成器,生成器開始執行,打印 Begin... 字符串,執行到 value = (yield value) 的位置時,首先調用 yield value 產生數字 1,然后生成器在 yield 的位置暫停。

接著調用第 2 個 next(generator) 的時候,生成器恢復執行,由于使用 next() 來調用生成器函數, value 的值會變成 None ,因此生成器函數繼續執行到 yield value 時,會將 value 的值 None 返回給解釋器,然后再次暫停。

福建快3电子走势图 湖北快3开奖号码今天 十一运夺金几点开始 北京股票配资公司 湖南快乐十分开奖102 南京配资公司 最新广西快乐双彩开奖结果查询 陕西十一选五任三遗漏 3d杀码3d杀号家彩网 炒股软件哪个好个好 2019香港开奖记录结果 小说