일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Algorithm
- Python
- 다트 언어
- github
- 플러터
- jupyter lab
- C언어 포인터
- Unity
- c# winform
- c#
- gitlab
- jupyter
- Flutter
- 도커
- Data Structure
- dart 언어
- HTML
- 포인터
- 깃
- C# delegate
- c언어
- vim
- 구조체
- c# 추상 클래스
- c# 윈폼
- C++
- Houdini
- 유니티
- git
- docker
Archives
- Today
- Total
nomad-programmer
[Programming/Python] yield from으로 값을 여러 번 바깥으로 전달하기 본문
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()를 사용하면 숫자를 세 번 출력한다.
'Programming > Python' 카테고리의 다른 글
[Programming/Python] 제네레이터 (generator) (0) | 2023.01.29 |
---|---|
[Programming/Python] 이터레이터 (iterator) (2) | 2023.01.29 |
[Programming/Python] 단위 테스트(unittest) - 보다 견고한 코드 만들기 (0) | 2021.05.26 |
[Programming/Python] Class Method & Static Method (0) | 2021.02.08 |
[Programming/Python] pyinstaller 파일 용량 문제 (0) | 2020.07.09 |
Comments