[python] yield vs return (feat. generator)

써니·2023년 9월 13일
0

Python

목록 보기
9/9

yield

  • generator를 만드는데 사용



return? yield?

  • 함수의 반환 : return or yield
  • 예제
    - A, B, C 반환하는 함수
    1. def return_abc() :
      	return list("ABC")
      	print(return_abc()
    2. def yield_abc():
        	yield ("A")
            yield ("B")
            yield ("C")
         print(yield_abc())
    • 출력 결과
      1 : ['A', 'B', 'C']
      2 : <generator object yield_abc at 0x7f4ed03e6040>





Generator

  • 여러 개의 데이터를 미리 만들어 놓지 않고 필요할 때마다 즉석해서 하나씩 만들어낼 수 있는 객체
  • ex) time.sleep() 이용한 예제

    	```python
    import time
    
    # ------------------------ 1: return 출력 -----
    def return_abc():
      alphabets = []
      for ch in "ABC":
        time.sleep(1)
        alphabets.append(ch)
    return alphabets  
    
    for ch in return_abc():
        print(ch)
    
    # ------------------------ 2: yield 출력 -----
    
    def yield_abc():    # yield from ["A", "B", "C"]와 동일
      for ch in "ABC":
        time.sleep(1)
        yield ch
       
  for ch in yield_abc():
      print(ch)
```
  • 1 출력 : 3초 경과 후 A, B, C 차례대로 출력
  • 2 출력 : 1초 후 A 출력, 1초 후 B 출력, 1초 후 C 출력





generator의 효율성

  • 제너레이터를 통해서는 결과값을 나누어서 얻을 수 있기 때문에 성능 측면에서 큰 이점

  • memory 측면

    • return 키워드를 사용할 때는 모든 결과 값을 메모리에 올려놓아야 함
    • yield 키워드를 사용할 때는 결과 값을 하나씩 메모리에 올려놓음







0개의 댓글