Generator

  • iterator를 생성해주는 함수로 함수안에 yield 키워드를 사용
  • 모든 값을 포함하여 반환하지 않고 한 개의 값씩 반환하는 방식
  • 메모리를 효율적으로 사용하기 위해 사용
# 기존 함수 구현
def square_numbers(nums):
    result = []
    for i in nums:
        result.append(i*i)
    return result


my_nums = square_numbers([1, 2, 3, 4, 5])
print(my_nums)
  • next() 메서드를 사용하거나 반복문을 통해 접근할 수 있음
# Generator를 활용한 함수 구현
def square_numbers(nums):
    for i in nums:
        yield i*i


my_nums = square_numbers([1, 2, 3, 4, 5])
print(next(my_nums))
print(next(my_nums))
print(next(my_nums))
print(next(my_nums))
print(next(my_nums))
# Generator를 활용한 함수 구현
def square_numbers(nums):
    for i in nums:
        yield i*i


my_nums = square_numbers([1, 2, 3, 4, 5])

for num in my_nums:
    print(num)
  • 함수로 구현하지 않고 Comprehension 형태로 구현할 수 있음
# Generator를 활용한 함수 구현
my_nums = (x*x for x in [1, 2, 3, 4, 5])

print(my_nums)

for num in my_nums:
    print(num)