yield는 제너레이터(generator) 함수를 만드는 데 사용되는 키워드임. 

  • 제너레이터는 이터레이터(iterator)를 생성하는 특별한 종류의 함수입니다

 

yield의 주요 특징:

  • 대량의 데이터를 다룰 때 모든 결과를 메모리에 한 번에 저장하지 않고, 필요할 때마다 하나씩 생성합니다.
  • 결과를 즉시 계산하지 않고, 요청될 때마다 계산합니다.
  • 함수의 상태를 유지하면서 여러 번 호출될 수 있습니다.

 

시용 예시:

def simple_generator():
    yield 1
    yield 2
    yield 3

# 사용
for num in simple_generator():
    print(num)

 

 

대규모 파일 데이터 처리 예시:

def large_file_reader(file_path):
    with open(file_path, 'r') as file:
        for line in file:
            yield line.strip()

# 사용
for line in large_file_reader('large_file.txt'):
    process_line(line)

 

 

무한 시퀀스 사용 예시:

def infinite_sequence():
    num = 0
    while True:
        yield num
        num += 1

# 사용
for i in infinite_sequence():
    print(i)
    if i > 100:
        break

 

 

send 를 통한 양방향 통신 예시:

  • yield 표현식은 값을 생성할 뿐만 아니라, 외부에서 값을 받을 수도 있습니다.
  • send() 메서드는 제너레이터에 값을 전달하고, 다음 yield 표현식까지 실행한 후 그 결과를 반환합니다.
  • next(gen) 또는 gen.send(None)로 제너레이터를 첫 번째 yield까지 실행합니다.
def echo_generator():
    while True:
        received = yield
        yield f"You said: {received}"

gen = echo_generator()
next(gen)  # 제너레이터 초기화
print(gen.send("Hello"))  # 출력: You said: Hello

 

 

yield 를 사용하는 패턴: for loop 이용

def number_generator():
    for i in range(5):
        yield i

for num in number_generator():
    print(num)

 

 

yield 사용 패턴: list(), tuple(), set() 등과 함께 사용 가능

numbers = list(number_generator())

 

 

yield 사용 패턴: 컴프리헨션

squares = (x**2 for x in range(10))  # 제너레이터 표현식
for square in squares:
    print(square)

 

 

yield 사용 패턴: next 를 이용한 수동 제너레이터

gen = number_generator()
print(next(gen))  # 0
print(next(gen))  # 1

+ Recent posts