[PYTHON] 파이썬 3.3에서 수율과 함께 생성기에서 반환
PYTHON파이썬 3.3에서 수율과 함께 생성기에서 반환
파이썬 2에서는 함수 정의에서 yield가 반환 될 때 오류가 발생했습니다. 하지만이 코드는 Python 3.3
def f():
return 3
yield 2
x = f()
print(x.__next__())
yield가있는 함수에서 return이 사용된다는 오류는 없습니다. 그러나 __next__ 함수가 호출되면 StopIteration 예외가 발생합니다. 왜 그냥 값 3을 돌려주지 않는가? 이 수익은 어떻게 든 무시됩니까?
해결법
-
==============================
1.이것은 Python 3.3의 새로운 기능입니다 (주석 노트에서는 3.2에서도 작동하지 않습니다). 생성기에서 리턴하는 것이 오랫동안 StopIteration ()을 발생시키는 것과 같습니다. 생성기에서 return
은 이제 StopIteration ( )을 발생시키는 것과 같습니다. 이러한 이유로 인해 표시되는 예외는 StopIteration : 3으로 인쇄되어야하며 값은 예외 객체의 속성 값을 통해 액세스 할 수 있습니다. 생성기가 (새로운) yield from 구문을 사용하도록 위임 된 경우 그 결과입니다. 자세한 내용은 PEP 380을 참조하십시오. 이것은 Python 3.3의 새로운 기능입니다 (주석 노트에서는 3.2에서도 작동하지 않습니다). 생성기에서 리턴하는 것이 오랫동안 StopIteration ()을 발생시키는 것과 같습니다. 생성기에서 return
은 이제 StopIteration ( )을 발생시키는 것과 같습니다. 이러한 이유로 인해 표시되는 예외는 StopIteration : 3으로 인쇄되어야하며 값은 예외 객체의 속성 값을 통해 액세스 할 수 있습니다. 생성기가 (새로운) yield from 구문을 사용하도록 위임 된 경우 그 결과입니다. 자세한 내용은 PEP 380을 참조하십시오. 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
이것은 1은 인쇄하지만 2는 인쇄하지 않습니다.
-
==============================
2.반환 값은 무시되지 않지만 생성기는 값만 생성하고 반환은 생성기를 끝내기 만합니다.이 경우 초기에 발생합니다. 이 경우 생성기를 발전시키는 것은 절대로 yield 문에 도달하지 않습니다.
반환 값은 무시되지 않지만 생성기는 값만 생성하고 반환은 생성기를 끝내기 만합니다.이 경우 초기에 발생합니다. 이 경우 생성기를 발전시키는 것은 절대로 yield 문에 도달하지 않습니다.
반복자가 양보 할 값의 '끝'에 도달 할 때마다 StopIteration을 발생시켜야합니다. 발전기도 예외는 아닙니다. 그러나 파이썬 3.3에서 어떤 반환 식이라도 예외의 값이됩니다 :
>>> def gen(): ... return 3 ... yield 2 ... >>> try: ... next(gen()) ... except StopIteration as ex: ... e = ex ... >>> e StopIteration(3,) >>> e.value 3
.__ next __ ()를 직접 호출하는 대신 next () 함수를 사용하여 이터레이터를 진행하십시오.
print(next(x))
from https://stackoverflow.com/questions/16780002/return-in-generator-together-with-yield-in-python-3-3 by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] OS X에서의 Python 및 OpenSSL 버전 참조 문제 (0) | 2018.10.05 |
---|---|
[PYTHON] 파이썬 : 부모 프로세스가 죽으면 어떻게 자식 프로세스를 죽일 수 있습니까?) (0) | 2018.10.05 |
[PYTHON] 파이썬 할당을 오버로드 할 수 있습니까? (0) | 2018.10.05 |
[PYTHON] 곱셈 (*)을 사용하여 하위 목록 생성 예기치 않은 동작 [복제] (0) | 2018.10.05 |
[PYTHON] 왜 속성 참조가 파이썬 상속과 같은 역할을합니까? [복제] (0) | 2018.10.05 |