Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

nomad-programmer

[Programming/Python] yield from으로 값을 여러 번 바깥으로 전달하기 본문

Programming/Python

[Programming/Python] yield from으로 값을 여러 번 바깥으로 전달하기

scii 2021. 9. 20. 17:53

yield 키워드로 값을 한 번씩 바깥으로 전달할 수 있다. 그래서 값을 여러 번 바깥으로 전달할 때는 for 또는 while 반복문으로 반복하면서 yield를 사용한다. 다음은 리스트의 1, 2, 3을 바깥으로 전달하는 예이다.

def number_generator():
    x = [1, 2, 3]
    for i in x:
        yield i
        
for i in number_generator():
    print(i)
    
    
# 결과
1
2
3

이런 경우에는 매번 반복문을 사용하지 않고, yield from을 사용하면 된다. yield from에는 반복 가능한 객체, 이터레이터, 제네레이터 객체를 지정한다.

yield from은 파이썬 3.3 이상부터 사용 가능하다.

  • yield from [반복 가능한 객체]
  • yield from [이터레이터]
  • yield from [제네레이터 객체]

다음은 yield from에 리스트를 지정해서 숫자 1, 2, 3을 바깥으로 전달하는 예제이다.

def number_generator():
    x = [1, 2, 3]
    yield from x        # 리스트 요소를 하나씩 바깥으로 전달
    
for i in number_generator():
    print(i)
    
    
# 결과
1
2
3

yield from x와 같이 yield from에 리스트(반복 가능한 객체)를 지정했다. 이렇게 하면 리스트에 들어있는 요소를 한 개씩 바깥으로 전달한다. 즉, yield from을 한 번 사용하여 값을 세 번 바깥으로 전달한다.

따라서 next 함수(__next__ 메서드)를 세 번 호출할 수 있다.


yield from에 제네레이터 객체 지정하는 방법

def number_generator(stop):
    n = 0
    while n < stop:
        yield n
        n += 1
        
def three_num_generator():
    yield from number_generator(3)
    
for i in three_num_generator():
    print(i)
    
    
# 결과
1
2
3

먼저 제네레이터 number_generator는 매개변수로 받은 숫자 직전까지 숫자를 만들어 낸다. 그리고 three_num_generator에는 yield from number_generator(3)과 같이 yield from에 제네레이터 객체를 지정했다.

number_generator(3)은 숫자를 세 개를 만들어내므로 yield from number_generator(3)은 숫자를 세 번 바깥으로 전달한다. 따라서 for 반복문에 three_num_generator()를 사용하면 숫자를 세 번 출력한다.

Comments