728x90
반응형
제너레이터(Generator)
- 이터레이터(Iterator)를 간단히 생성해주는 함수
- 일반적인 함수처럼 정의되지만, 값을 반환할 때 return 대신 yield 사용
- 제너레이터 함수는 호출될 때 실행되지 않고, 제너레이터 객체를 반환
- 이터레이터 프로토콜를 따름
- yield 키워드: 값을 생성하고, 함수의 실행 상태를 유지. 다음 next() 호출 시 이 상태로 다시 실행을 시작
- 지연 평가: 값을 필요할 때마다 하나씩 생성하여 메모리 사용을 줄임
def gen():
yield 'a'
yield 'b'
yield 'c'
g = gen()
next(g) # 'a'
next(g) # 'b'
next(g) # 'c'
next(g) # StopIteration
- 모든 제너레이터는 이러에티러를 만드므로 제너레이터 객체는 이터레이터 객체임
제너레이터 표현식
- 제너레이터 함수를 사용하지 않고 간단하게 제너레이터를 만드는 방법
- 소괄호 '()'를 사용하여 정의
gen_exp = (x * x for x in range(3))
print(next(gen_exp)) # 0
print(next(gen_exp)) # 1
print(next(gen_exp)) # 4
print(next(gen_exp)) # StopIteration
제너레이터와 제너레이터 표현식의 차이
- 제너레이터 함수: 함수 내에서 yield 키워드를 사용하여 제너레이터 객체를 생성. 함수가 호출될 때마다 제너레이터 객체를 반환.
- 제너레이터 표현식: 소괄호 ()를 사용하여 간단히 제너레이터를 생성. 표현식 자체가 제너레이터 객체를 반환.
다음은 같은 기능을 하는 제너레이터 객체를 각각 제너레이터 함수와 제너레이터 표현식으로 나타낸 코드이다.
# 제너레이터 함수 사용
def mygen():
for i in range(1, 1000):
result = i * i
yield result
# 제너레이터 표현식 사용
gen = (i * i for i in range(1, 1000))
728x90
반응형
'Programming Language > Python' 카테고리의 다른 글
[FastAPI] 2. 경로 매개변수(Path Parameters) (0) | 2024.06.18 |
---|---|
[FastAPI] 1. 간단한 FastAPI 만들기 (0) | 2024.06.18 |
[Python] 이터레이터(Iterator) (1) | 2024.06.14 |
[Python][Anaconda] Solving environment: failed with initial frozen solve. Retrying with flexible solve. (2) | 2024.01.13 |
[Python] 정규표현식 (1) | 2023.12.29 |