Development Tip

동일한 기능에서 반환 및 산출

yourdevel 2020. 12. 30. 19:44
반응형

동일한 기능에서 반환 및 산출


파이썬에서 동일한 함수에서 yield와 return을 사용하면 정확히 어떻게됩니까?

def find_all(a_str, sub):
    start = 0
    while True:
        start = a_str.find(sub, start)
        if start == -1: return
        yield start
        start += len(sub) # use start += 1 to find overlapping matches

여전히 발전기입니까?


예, 여전히 발전기입니다. return모금에 (거의) 동일합니다 StopIteration.

PEP 255는 다음과 같이 설명합니다.

사양 : 반환

생성기 함수에는 다음 형식의 return 문도 포함될 수 있습니다.

"return"

expression_list는 생성기 본문의 return 문에서 허용되지 않습니다 (물론 생성기 내에 중첩 된 비 생성자 함수의 본문에 나타날 수 있음).

return 문이 나타나면 적절한 finally 절 (있는 경우)을 실행하여 모든 함수 반환 에서처럼 제어가 진행됩니다. 그런 다음 StopIteration 예외가 발생하여 반복기가 소진되었음을 알립니다. 제어가 명시 적 반환없이 생성기 끝에서 흘러 나오는 경우에도 StopIteration 예외가 발생합니다.

return은 제너레이터 함수와 비 제너레이터 함수 모두에 대해 "완료했습니다. 반환 할 내용이 없습니다"를 의미합니다.

return은 항상 StopIteration을 발생시키는 것과 동일하지 않습니다. 차이점은 둘러싸는 try / except 구조가 처리되는 방식에 있습니다. 예를 들면

>>> def f1():
...     try:
...         return
...     except:
...        yield 1
>>> print list(f1())
[]

모든 함수에서와 마찬가지로 return은 단순히 종료되지만

>>> def f2():
...     try:
...         raise StopIteration
...     except:
...         yield 42
>>> print list(f2())
[42]

StopIteration은 모든 예외와 마찬가지로 베어 "예외"에 의해 캡처되기 때문입니다.


예, 여전히 발전기입니다. 비어 return있거나 return None생성기 함수를 종료하는 데 사용할 수 있습니다. 이것은 a를 올리는 것과 같습니다 StopIteration(자세한 내용은 @NPE의 답변 참조).

None이 아닌 인수가있는 반환은 SyntaxError3.3 이전의 Python 버전에서입니다.

@BrenBarn이 Python 3.3부터 시작하는 주석에서 지적했듯이 이제 반환 값이 StopIteration.

에서 PEP 380 :

생성기에서 문

return value

의미 상 동등하다

raise StopIteration(value)

값이나 생성기를 반환 할 수있는 함수에서 yield 및 return 메서드를 사용하는 방법이 있습니다.

원하는만큼 깨끗하지는 않지만 예상 한대로 작동합니다.

예를 들면 다음과 같습니다.

def six(how_many=None):
    if how_many is None or how_many < 1:
        return None  # returns value

    if how_many == 1:
        return 6  # returns value

    def iter_func():
        for count in range(how_many):
            yield 6
    return iter_func()  # returns generator

ReferenceURL : https://stackoverflow.com/questions/26595895/return-and-yield-in-the-same-function

반응형