yield from 語法在呼叫者和被呼叫者之透明的資料交換
def reader():
"Simulates reading data from a source"
for i in range(4):
yield f"範例:從生成器讀取資料def reader():
“模擬從來源讀取資料”
對於範圍 (4) 內的 i:
產量 f"def writer():
"Simulates writing data to a destination"
while True:
w = (yield)
print(f">>> {w}")
writer_wrapper = writer_wrapper(writer())
for i in range(4):
wrap.send(i) # Output: >>> 0, >>> 1, >>> 2, >>> 3
範例:向協程發送資料
def writer():
“模擬將資料寫入目的地”
而真實:
w = (產量)
印製(f">>> {w}")
writer_wrapper = writer_wrapper(writer())
對於範圍 (4) 內的 i:
wrap.send(i) # Output: >>> 0, >>> 1, >>> 2, >>> 3
在此範例中,yield from 語法允許包裝器函數將資料傳送到writer() 協程,建立直接資料交換。
異常處理
class SpamException(Exception):
pass
def writer():
while True:
try:
w = (yield)
except SpamException:
print("***")
else:
print(f">>> {w}")
writer_wrapper = writer_wrapper(writer())
# Raising an exception within the wrapper
wrap.throw(SpamException)
# Expected Output: ***
範例:使用 SpamException 進行例外處理class SpamException (例外):
經過
def writer():
而真實:
嘗試:
w = (產量)
除了垃圾郵件異常:
列印("***")
別的:
印製(f">>> {w}")
writer_wrapper = writer_wrapper(writer())
# 在包裝器中引發異常
拋出(SpamException)
# 預期輸出:***
Yield from 確保異常順利傳播,無需在包裝函數中進行手動異常處理。
結論
Yield from is強大的語法可以簡化調用者和子生成器之間雙向資料交換的實現,無縫處理異常。它提供了一種透明且高效的方式在這些元件之間進行通信,使其成為處理 Python 3.3 及更高版本中複雜資料處理場景的寶貴工具。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3