반응형
  • 이터러블 객체
    • 순서가 있는 자료형
    • 문자열, 리스트, 튜플, 딕셔너리, range 객체
    • __iter__(), __next__() 메소드가 정의되어있다.
  • 제너레이터 함수
    • 이터레이터를 만드는 함수이다.
    • yield 사용한다
    • 제너레이터 표현식을 사용해서 만들 수 있다.
    • 메모리 사용이 효율적이다.
      • List 같은 경우 결과 값을 메모리에 저장한다.
      • 제너레이터의 경우 식만 저장할뿐 값을 저장 하지 않는다. __next__ 함수가 호출 될 때에 결과값을 만든다
# yield 사용
def gen_func(*args):
  for arg in args:
    yield arg

month = gen_func('1월', '2월', '3월', '4월')

print(month.__next__())   # 1월
print(month.__next__())   # 2월
print(month.__next__())   # 3월
print(month.__next__())   # 4월


# 제너레이터 표현식 -> () 를 사용한다.
double_generator = (i * 2 for i in range(1,10))

for i in double_generator:
  print(i)


# 메모리 차이
import sys

list_data = [i * 3 for i in range(1, 10000+1)]
generator_data = (i * 3 for i in range(1, 10000+1))

print(sys.getsizeof(list_data))       # 85176
print(sys.getsizeof(generator_data))  # 208

 

728x90
반응형

+ Recent posts