Yield From 構文は、呼び出し元と呼び出し元の間に直接接続を確立します。サブジェネレータ間でデータがシームレスに流れることを可能にします。値のみを生成できる従来の for ループとは異なり、yield from は双方向チャネルを提供します。これは、クライアント ソケット間で一時的な接続を確立し、データの受信と送信の両方を可能にすることに似ています。
def reader():
"Simulates reading data from a source"
for i in range(4):
yield f"yield from を使用すると、手動でループを処理せずにリーダー ジェネレーターを反復処理できます。
例: コルーチンへのデータの送信
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
この例では、構文からの出力により、ラッパー関数がデータを送信できるようになります。 Writer() コルーチンは、直接データ交換を確立します。
例外処理
Yield from は、エラー伝播も透過的に処理します。サブジェネレーターで例外が発生した場合、その例外は呼び出し元によって再発生されるか、サブジェネレーター内で処理されます。
例: SpamException による例外処理
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: ***
Yield from は、ラッパー関数で手動の例外処理を必要とせずに、例外がスムーズに伝播されることを保証します。
結論
Yield from は呼び出し元とサブジェネレーターの間の双方向データ交換の実装を簡素化し、例外をシームレスに処理する強力な構文です。これは、これらのコンポーネント間で通信するための透過的かつ効率的な方法を提供し、Python 3.3 以降の複雑なデータ処理シナリオを処理するための貴重なツールになります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3