함수를 생성기로 전환합니다. Yield가 있는 함수는 더 이상 일반적인 함수가 아닙니다. 즉, Yield를 사용하는 함수는 생성기입니다. 생성기를 생성하는 것은 함수 호출처럼 보이지만 next()가 호출될 때까지 함수 코드가 실행되지 않습니다. for 루프 next())가 실행을 시작합니다. 실행 흐름은 여전히 함수의 흐름에 따라 실행되지만, Yield 문이 실행될 때마다 중단되고 반복 값이 반환됩니다. 다음 실행은 다음 Yield 문에서 계속됩니다. 정상적인 실행 중에 함수가 Yield에 의해 여러 번 중단되고 각 중단이 Yield를 통해 현재 반복 값을 반환하는 것처럼 보입니다.
#!/usr/bin/env python # -*- coding: utf-8 -*-def fab(max): n , a, b = 0, 0 , 1 while n < max: print(b) a, b = b, a + b n = n + 1if __name__ == '__main__': fab(6) # 1 1 2 3 5 8
yield를 사용하여 피보나치 수열 인쇄 - 업그레이드 버전#!/usr/bin/env python
# -*- coding: utf-8 -*-def fab(max):
n , a, b = 0, 0 , 1
while n < max:
yield b
a, b = b, a + b
n = n + 1if __name__ == '__main__':
for n in fab(6): # 1 1 2 3 5 8
print(n)
__next__()
#!/usr/bin/env python # -*- coding: utf-8 -*-from inspect import isgeneratorfunction def fab(max): n , a, b = 0, 0 , 1 while n < max: yield b a, b = b, a + b n = n + 1if __name__ == '__main__': f1 = fab(3) # True fab是一个generator function print(isgeneratorfunction(fab)) # False fab(3)不是一个generator function # 而fab(3)是调用fab返回的一个generator print(isgeneratorfunction(fab(3)))
Yield를 사용하여
#!/usr/bin/env python # -*- coding: utf-8 -*-def read_file(fpath): BLOCK_SIZE = 100 with open(fpath, "rb") as f: while True: block = f.read(BLOCK_SIZE) if block: yield block else: returnif __name__ == '__main__': fpath = "/home/exercise-python3.7.1/vote/mysite/mysite/polls/test.txt" read_gen = read_file(fpath) print(read_gen.__next__()) print(read_gen.__next__()) print(read_gen.__next__()) print(read_gen.__next__()) # for循环会自动调用generatr的__next__()方法,故输出效果同如上的4个print 【内容较短,4个print就将test.txt中的内容输出完了】 for data in read_gen: print(data)
위 내용은 사용법 요약 및 자세한 설명에서 Python 산출량 및 산출량의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!