Python 생성기에서 Return과 Yield를 함께 사용
Python 2에서 생성기 함수 내부에 return 문을 사용하면 Yield도 사용됩니다. 오류. 그러나 Python 3.3에서는 미묘한 변경이 발생했습니다.
코드 데모
다음 Python 3.3 코드를 고려하세요.
def f():
return 3
yield 2
x = f()
print(x.__next__())
설명
이 코드에서 함수 f에는 return 문과 항복 문이 모두 포함되어 있습니다. 함수가 호출되면 return 문이 먼저 실행되고 값 3이 반환됩니다. 결과적으로, 항복 문은 실행되지 않습니다.
생성기 x가 next 메서드를 호출하여 반복되면 값 3으로 StopIteration 예외가 발생합니다. 이는 생성기의 반복자가 소진되고 return 문에서 반환된 값은 예외의 값 속성으로 사용할 수 있습니다.
Python 3.3의 새로운 메커니즘
PEP 380에 따르면 , 이 동작은 Python 3.3에 도입된 새로운 기능입니다. 다음과 같이 작성하는 것과 같습니다:
def f():
yield 3
raise StopIteration
Yield from
다음 예는 이 동작이 Yield from 구문을 사용하여 위임된 생성기에 어떤 영향을 미치는지 보여줍니다.
def f():
return 1
yield 2
def g():
x = yield from f()
print(x)
# g is still a generator so we need to iterate to run it:
for _ in g():
pass
이 경우, Yield from 문은 생성기 f에 위임됩니다. f는 값을 반환하지만 더 이상 항복 문이 없으므로 값 1이 인쇄됩니다. 그러나 f의 Yield 2 문은 실행되지 않습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3