yield
키워드를 사용하여 값을 반환하며, 함수가 다시 호출될 때마다 이전에 중단된 위치에서 실행을 계속한다.# 제네레이터
# 제너레이터 함수를 사용하여 피보나치 수열 구
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