Python의 Yield 및 생성기 예제 코드에 대한 자세한 설명

高洛峰
풀어 주다: 2017-03-15 14:01:47
원래의
1725명이 탐색했습니다.

먼저 작은 프로그램에서 가져오고 각각 목록을 정의하고 그 안에서 소수를 찾으면 다음과 같이 씁니다.

import math
def is_Prims(number):

    if number == 2:
        return True
    //除2以外的所有偶数都不是素数
    elif number % 2 == 0:
        return False
    //如果一个数能被除1和本身之外的数整除,则为合数。其实我们的判定范围到根号n就可以
    for cur in range(2,int(math.sqrt(number))+1,2):
        if number % cur == 0:
            return False
        else:
            return True

def get_Prims(input_list):

    result_list = list()
    for element in input_list:
        if is_Prims(element):
            result_list.append(element)
    return result_list

aa = get_Prims([1,2,3,4,5,6,7,8,9])
print (aa)
로그인 후 복사

하지만 숫자를 지정하려면 , 그 다음 목록 이 숫자보다 큰 소수는 모두 어떻게 되나요? 다음과 같이 쓸 수 있습니다:

def get_Prims(number):
    if is_Prims(number):
            return number
로그인 후 복사

그러나 호출자에게 제어권을 넘긴 후 returnfunction이 완전히 끝나면 다음과 같이 모든 로컬변수 및 함수 작업이 삭제됩니다. 통화가 처음부터 다시 시작됩니다. 따라서 다음과 같은 작성 방법을 사용할 수 있습니다.

def get_Prims(number):
    while(True):
        if is_Prims(number):
            yield number
        number += 1

def get_numbers():
    total = list()
    for next_prim in get_Prims(2):
        if next_prim < 100:
            total.append(next_prim)
        else:
            print(total)
            return

get_numbers()
로그인 후 복사

생성기 함수를 설명하겠습니다. 함수의 def 코드에는 Yield가 포함되어 있으며 함수는 자동으로 생성기 함수가 됩니다(아직 return이 포함되어 있어도). Generator 함수는 Generator(특수한 형태의 Iterator, 이 Iterator에는 next() 메소드가 내장되어 있음)를 생성하고, 값이 필요할 때 직접 반환이 아닌 Yield를 통해 생성하므로 제어 권한은 다음과 같습니다. 넘겨지지 않았습니다.

for 루프는 암시적으로 next() 함수를 호출합니다. next() 함수는 생성기에서 next() 메서드를 호출하는 역할을 담당합니다. next() 메소드에 대한 호출에 값을 반환하려면 Yield를 사용하여 이 값을 다시 전송하십시오. 이는 return 문과 동일합니다.


위 내용은 Python의 Yield 및 생성기 예제 코드에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿