Dev./Python

Python - Generator

Ivan'show 2023. 6. 10.
728x90
반응형
  • generator 는 파이썬에서 특별한 종류의 iterator 를 생성하는 함수이다.
  • yield 키워드를 사용하여 값을 반환하며, 함수가 다시 호출될 때마다 이전에 중단된 위치에서 실행을 계속한다.
  • 메모리를 효울적으로 사용한다.
  • lazy evaluation : generator 요청에 따라 값이 생성되므로, 필요한 값만 계산하여 시간을 절약할 수 있다.

피보나치 수열

# 제네레이터
# 제너레이터 함수를 사용하여 피보나치 수열 구
def fibonacci_generator(n):
    a, b = 0, 1
    for _ in range(n):
        yield a
        a, b = b, a + b

fibonacci_sequence = fibonacci_generator(10)

for number in fibonacci_sequence:
    print(number)
# 0
# 1
# 1
# 2
# 3
# 5
# 8
# 13
# 21
# 34

# 제너레이터 함수와 next()를 사용하여 피보나치 시퀀스 생성하기
def fibonacci(n):
    a, b = 0, 1
    for _ in range(n):
        yield a
        a, b = b, a + b
result = fibonacci(10)

print(next(result))
# 0
print(next(result))
# 1
print(next(result))
# 1

for num in result:
    print(num)
# 2
# 3
# 5
# 8
# 13
# 21
# 34

# if, 중간에 next 1개가 없다면 ??
def fibonacci(n):
    a, b = 0, 1
    for _ in range(n):
        yield a
        a, b = b, a + b
result = fibonacci(10)

print(next(result))
# 0
# print(next(result))
print(next(result))
# 1

for num in result:
    print(num)
# 1
# 2
# 3
# 5
# 8
# 13
# 21
# 34

위 내용에서 볼 수 있듯, 제너레이터는 트리거가 될 때 마다 함수가 실행되는 것을 알 수 있다.

다른 사용방법

# 제너레이터 함수를 사용하여 홀수 숫자 시퀀스 생성하기
def odd_numbers(start, end):
    while start <= end:
        if start % 2 != 0:
            yield start
        start += 1

result = odd_numbers(1, 10)

for num in result:
    print(num)
# 1
# 3
# 5
# 7
# 9

# 제너레이터 함수를 사용하여 알파벳 시퀀스 생성하기
def generate_alphabet(start_letter, end_letter):
    start = ord(start_letter)
    end = ord(end_letter)
    while start <= end:
        yield chr(start)
        start += 1

runner = generate_alphabet('A', 'F')
for letter in runner:
    print(letter)
# A
# B
# C
# D
# E
# F
728x90
반응형

'Dev. > Python' 카테고리의 다른 글

Python - 패키지  (0) 2023.06.12
Python - 클래스 상속 (Inheritance)  (0) 2023.06.12
Python - 함수 : 작동원리, return, 기본값, 가변, 키워드  (0) 2023.06.11
Python - Dictionary  (0) 2023.06.09
Python - Tuple  (0) 2023.06.08

댓글