>  기사  >  백엔드 개발  >  Python의 수율 사용에 대한 자세한 설명

Python의 수율 사용에 대한 자세한 설명

高洛峰
高洛峰원래의
2017-03-17 16:57:082633검색

yield는 단순히 생성기입니다. 생성기는 마지막으로 반환되었을 때 함수 본문의 위치를 ​​기억하는 함수입니다. 생성기 함수에 대한 두 번째(또는 n번째) 호출은 함수의 중간으로 이동하며 모든 로컬 변수 는 이전 호출과 변경되지 않은 상태로 유지됩니다.

생성기는 함수입니다

함수의 모든 매개변수는 유지됩니다

이 함수가 두 번째 호출될 때

사용되는 매개변수는 다음과 같습니다. .

생성기는 흐름 제어 생성자

의 데이터 상태 도 "기억"합니다. 생성기는 또한 흐름 제어 구성 내에서의 위치를 ​​"기억"합니다(명령형 프로그래밍에서 이 구성은 단순한 데이터 값이 아닙니다). 연속성은 (생성기와 마찬가지로) 즉시 호출자의 컨텍스트로 항상 돌아가지 않고 실행 프레임 사이를 임의로 이동할 수 있기 때문에 여전히 상대적으로 일반적입니다.

Yield Generator의 작동 메커니즘

Generator에 숫자를 요청하면 Generator는 Yield 문이 나타날 때까지 실행됩니다. 발전기가 계속 작동하지 않습니다. 당신이 그에게 다음 번호를 물으면 그는 항복 문이 나타날 때까지 마지막 상태부터 실행을 시작하고 매개변수를 제공한 다음 중지합니다. 함수가 종료될 때까지 이를 반복합니다.

예: Python 순열, 조합 생성기

#Generate full permutation

def perm(items, n=None):
    if n is None:
        n = len(items)
    for i in range(len(items)):
        v = items[i:i+1]
        if n == 1:
            yield v
        else:
            rest = items[:i] + items[i+1:]
            for p in perm(rest, n-1):
                yield v + p

#Generate 조합

def comb(items, n=None):
    if n is None:
        n = len(items)    
    for i in range(len(items)):
        v = items[i:i+1]
        if n == 1:
            yield v
        else:
            rest = items[i+1:]
            for c in comb(rest, n-1):
                yield v + c
 
a = perm('abc')
for b in a:
    print b
    break
print '-'*20
for b in a:
    print b

결과는 다음과 같습니다. 다음:

102 pvopf006 ~/test> ./generator.py

abc

--------------- - ---

acb

bac

bca

cab

cba

보시다시피, 루프 중단 후 생성기는 계속 실행되지 않고 첫 번째 루프 이후에 두 번째 루프가 실행됩니다.

위 내용은 Python의 수율 사용에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.