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()를 사용하면 숫자를 세 번 출력한다.