Python 생성기 및 사용 방법

3151 단어

의제 :


  • 생성기란 무엇입니까?
  • 일반 함수 대 생성기
  • 제너레이터 사용의 장점
  • 루프가 있는 생성기
  • 기능이 있는 발전기
  • 제너레이터 표현식
  • 사용 사례

  • Python의 Generator는 무엇입니까?



    생성기는 기본적으로 순회 가능한 객체 또는 항목을 반환하는 기능입니다. Generator는 한 번에 출력을 생성하지 않지만 Generator는 필요할 때 출력을 생성합니다. Generator에는 많은 장점이 있으며 그 중 일부는 여기서 논의할 것입니다. :)

    제너레이터 사용의 장점


  • python에서 생성기가 없으면 iterable을 생성하는 것이 매우 어렵고 길어집니다.
  • 생성기가 자동으로 구현되므로 구현하기 쉬운 생성기는 __iter()__ 및 __next()__와 stopiteration입니다.
  • 여러 작업에 파이프라인을 사용할 수도 있습니다
  • .
  • 을 사용하여 무한한 수의 항목
  • 을 생산할 수 있습니다.
  • 일반 기능과 달리 필요할 때 아이템이 생성되어 메모리가 저장됩니다. 이 사실은 엄청난 수의 반복자를 만들어야 할 때 매우 중요해집니다.

  • 일반 기능 VS 생성기 기능:



    Normal과 Generator 함수의 차이점은 키워드 return to yield 뿐입니다. 일반 함수에서는 출력을 반환하지만 Generator 함수에서는 yield 의 객체를 반환합니다 list . next()를 사용하면 객체를 사용하여 숫자를 얻습니다. Normal 함수에서는 함수 이름으로 함수를 호출하지만 생성기 함수에서는 next()로 함수를 호출했습니다.

    생성기 기능

    #Genarator function
    def func(a):
        yield a #change keyword return to yield
    a = [1,2,3]
    b=func(a)
    next(b)
    
    output --->
    [1 , 2 , 3 ]

    다음() 사용

    def myfunc(a):
        while a>=3:
            yield a
            a=a+1
    b =  myfunc(a)
    print(b)
    next(b)

    정상적인 기능

    def func(a):
        return a
    a=[1,2,3]
    func(a)
    
    output -->
    [1 ,2 , 3]

    위의 코드를 보면 수익으로 돌아가는 변화를 관찰할 수 있지만 기능은 완전히 반대입니다. yield는 next()를 사용하여 출력의 객체를 반환하고 우리는 그것을 얻습니다. 그의 이름으로 호출되는 일반 함수이지만 next()에 의해 호출되는 생성기 함수입니다. 아래 이미지를 본 후에 깨닫게 될 것입니다.



    루프가 있는 생성기



    같은 기능을 한 번에 실행하고 싶을 때는 'for' 루프를 사용하면 됩니다. 이 루프는 객체를 반복하는 데 도움이 되며 모든 구현 후에 StopIteration을 실행합니다.

    def z():
        n=1
        yield n
        n=n+3
        yield n
    for x in z():
        print(x)
    
    
    output --->>
    1 
    4

    생성기 표현식:



    루프 프로시저 반복기에 대한 루프와 함께 식을 사용할 수도 있습니다. 이것은 생성을 반복 가능하고 이해하기 쉽게 만듭니다.

    print("Generator Expression " , end= " :n ")
    range_list=range(6)
    ret =  (number for number in range_list)
    print(c)
    for ret_number in ret:
       print(ret_number)
    

    주요 차이점



    우리가 말했듯이 Generator는 코드를 예쁘고 읽기 쉽게 만들고 메모리와 코드를 적게 사용하며 코드를 줄입니다. 이제 먼저 살펴볼 시간입니다. 제너레이터 없이 코드를 작성한 다음 제너레이터로 코드를 작성하면 파이썬에서 제너레이터의 차이점과 축복을 볼 수 있습니다.

    생성기를 사용하지 않고 코드 작성

    class Nums:
        MAX = 4
        def __init__(self):
            self.current = 0
        def __iter__(self):
            return self
        def __next__(self):
            next_value = self.current
            if next_value >= self.MAX:
                raise StopIteration
            self.current += 1
            return next_value
    

    생성기를 사용한 코드

    def func(var1):
        yield var1
        var1 +=1
    

    좋은 웹페이지 즐겨찾기