Python의 Yield 및 Generator 분석

高洛峰
풀어 주다: 2017-03-07 16:38:54
원래의
1337명이 탐색했습니다.

먼저 작은 프로그램에서 가져오고 각각의 목록을 정의한 다음 그 안에서 소수를 찾습니다.

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
로그인 후 복사

그러나 호출자에게 제어권을 넘긴 후 반환 함수가 완전히 종료되면 모든 지역 변수와 함수 작업이 삭제되고 다음 호출이 처음부터 시작됩니다. 따라서 다음과 같은 작성 방법을 사용할 수 있습니다.

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이 포함되어 있어도). 제너레이터 함수는 제너레이터를 생성합니다(특수한 형태의 반복자로서 이 반복자는 __next__() 메서드가 내장되어 있습니다). 따라서 값이 필요할 때 일반 함수와는 달리 직접 반환을 통해 생성됩니다. 이번에는 넘겨지지 않았습니다.

for 루프는 암시적으로 next() 함수를 호출합니다. next() 함수는 생성기에서 __next__() 메서드를 호출하는 역할을 합니다. 이때 생성기는 임의의 항목에 값을 반환하는 역할을 합니다. next()를 호출하는 메서드입니다. Use Yield는 return 문과 동일하게 이 값을 다시 전달합니다.

파이썬의 Yield 및 Generator 분석과 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

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