구문의 산출은 호출자와 호출자 사이에 직접적인 연결을 설정합니다. 데이터가 그들 사이에서 원활하게 흐를 수 있도록 하는 하위 생성기입니다. 값만 산출할 수 있는 기존 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
이 예에서 Yield from 구문을 사용하면 래퍼 함수가 데이터를 보낼 수 있습니다. 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