파이썬(Python)/문법

[Python] 파이썬 yield란? 사용목적 (Generator, 제너레이터)

끄적끄적아무거나 2022. 6. 24. 09:04
반응형

 

목차

     

     

    파이썬 yield와 generator의 의미

    간단히 말해서 파이썬의 generator란 반복(iterator) 동작을 간단하게 실행시켜주는 방법입니다. generator를 만들때 일반적인 함수를 정의하면서 return 문구를 쓰는 것이 아닌 yield를 사용합니다.

     

    • generator 함수는 최소 하나의 yield 를 포함
    • next() 메소드가 자동으로 실행됨
    • yield가 실행되면 함수는 중단하고 control이 콜러(caller)에게 넘어감

     

    코드를 통해 직접 설명드리겠습니다.

     

    예제 코드>>

    def gen_func():
      yield 1
    
    print(gen_func())

     

    결과>>

    <generator object gen_func at 0x0000025D61859A10>

     

    위 예제 코드와 같이 gen_func 함수에 yield가 포함되기 때문에 해당 함수는 generator가 됩니다. 

     

     

     

     

     

     

    파이썬 yield 사용 방법 

     

    yield를 사용하는 이유는 return과 같이 모든 결과에 대한 처리를 메모리에 올리지 않고 함수에서 yield를 요청할 때 해당 yield까지만 사용하고 다음 번 yield 나오는 부분은 사용하지 않기 때문에 메모리를 절감 합니다.

     

    아래 예제를 통해 출력하는 방법 2가지에 대해 알아 보겠습니다.

     

    예제 코드- for 문>>

    def gen_func(x):
        print('입력값')
        yield x
    
        print("입력값 + 1")
        x += 1
        yield x
    
        print("입력값 + 2")
        x += 1
        yield x
    
    for x in gen_func(1):
      print(x)

    3,7,11번 라인: 3개의 yield를 만들어 for문이 들어가서 요청할 때마다 하나씩 출력 합니다.

     

    입력값
    1
    입력값 + 1
    2
    입력값 + 2
    3

     

     

     

    예제 코드- next 메소드 사용>>

    def gen_func(x):
        print('입력값')
        yield x
    
        print("입력값 + 1")
        x += 1
        yield x
    
        print("입력값 + 2")
        x += 1
        yield x
    
    a_func = gen_func(3)
    
    print(next(a_func))
    print(next(a_func))
    print(next(a_func))

    13번 라인 : generator 함수 gen_func를 다른 함수에 정의

    15~17번 라인: next 메소드를 사용해서 yield를 한번씩 출력

     

    결과>>

    입력값
    3
    입력값 + 1
    4
    입력값 + 2
    5

     

     

    반응형