생성기 Yield: Yield 문
을 사용하면 함수가 단순한 값 대신 결과 시퀀스를 생성할 수 있습니다.
def countdow(n): print("Start!"); while n>0: yield n; n -= 1; c = countdow(5); print(c.__next__()) print(c.__next__())
출력 결과:
Start! 5 4
__next__() 메서드 다음 Yield 문까지 생성기 함수가 실행되도록 합니다. 이때 __next__() 메서드는 반환 값을 항복에 전달하고 함수는 일시적으로 실행을 일시 중지합니다.
__next__()가 다시 호출되면 함수가 계속 실행됩니다. 생성될 때까지 프로세스가 계속됨 생성기 함수가 끝까지 반환됨
일반적으로 __next__() 메서드는 수동으로 호출되지 않지만
루프
for i in countdow(5): print(i);
를 사용하여 결과를 출력합니다.
5 4 3 2 1
처리 기반 생성기 파이프, 스트림 또는 데이터 흐름을 사용하여 프로그램을 작성하는 강력한 방법입니다.
예:
def tail(f): for line in f: if not line : #如果 非真 则暂时休眠并且再次尝试 time.sleep(0.1); continue; yield line; # 将获取到的文件中的值 生成一个序列的值 filecount = tail(open('E:/work.txt')); #grep方法 用于在上面方法生成器中查找特定的子字符串 def grep(lines,searchtext): for line in lines: if searchtext in line : yield line; lines = grep(filecount,'tom'); #查找带有tom 的子字符串 for line in lines: print(line);
출력 결과:
'tom',120,132
요약:
제너레이터의 역할 : 프로그램이 Yield로 실행되면 실행값
이 넘겨져 프로그램이 출력되지 않습니다. 이때는 프로그램이 정지된 상태라고 볼 수 있습니다. __next__() 메서드를 사용하면 함수는 다시 만날 때까지
을 계속 실행합니다.
장점: Yield는 단일 값을 저장하지 않고 현재 프로그램 실행 상태를 저장합니다. 모든 요소를 한 번에 계산할 필요는 없지만 메모리 공간을 절약하기 위해 한 번에 계산합니다
위 내용은 Python에서 생성기의 Yield 내용입니다. PHP 중국어 웹사이트(www.php.php.php)를 참고하세요. cn) 더 많은 관련 콘텐츠를 확인해보세요!