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 중국어 웹사이트의 기타 관련 기사를 참조하세요!