일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 파이썬 GUI
- 지리산 황토 펜션
- 계곡 펜션
- 하늘숲펜션
- 오봉 계곡
- 파이썬
- 아나콘다 텐서플로
- 하늘숲 황토 펜션
- LISP 함수
- 전용 계곡
- tensorflow
- Python
- HTML
- LISP
- machine learning
- CUDA9.0
- 지리산 둘레길
- cuda
- 황토펜션
- 텐서플로 설치
- 출근 전날
- 지리산 펜션
- 파이썬 yield
- python yield
- 인공지능
- 산청 황토 펜션
- 하늘숲황토펜션
- anaconda tensorflow
- tensorflow 설치
- ubuntu
- Today
- Total
YongWook's Notes
<파이썬> yield from 본문
Python : yield from
앞선 포스트에서 알아보았던 generator & yield에서 한걸음 더 나아가, 이번 포스트에서는 yield from
이라는 파이썬 문법을 알아보려고 한다. yield from
은 python 3.3 이상 버전에서 사용가능한 문법이다.
이번 포스트 또한 Simeon Visser’s blog의 내용을 참조하여 작성하였음을 미리 알린다.
사실 기초 프로그래밍을 공부하는 학생들은 generator를 다룰 일이 자주 없지만, 실제 프로그래밍에서는 심심찮게 등장하기 때문에 개념을 숙지해놓으면 분명 도움이 될 것이다.
yield from
의 필요성
def generator():
for i in range(10):
yield i
for j in range(10, 20):
yield j
위와 같이 yield가 여러번으로 나뉜 코드를 작성하게 된 경우라고 가정해보자. 이 generator()
는 순서대로 0부터 19까지의 수를 반환하도록 설계되어 있다. 그런데 만약, yield i
와 yield j
부분의 코드를 재사용하고 싶다면 우리는 이 코드를 다음과 같이 재작성할 수 있다.
def generator2():
for i in range(10):
yield i
def generator3():
for j in range(10,20):
yield j
def generator():
for i in generator2():
yield i
for j in generator3():
yield j
코드를 재사용할 수 있게 작성하였으나 명시적이지 않다. 오히려 의도를 파악하기 힘들어 혼란을 초래할 수 있다. 따라서 보다 명시적으로 표현할 수 있는 문법에 대한 수요가 생겼다. 이것이 yield from
이다.
yield from
의 사용법
위의 코드에서 yield from
을 사용하면 generator()
부분을 조금 더 간결하게 만들 수 있다.
def generator():
yield from generator2()
yield from generator3()
이 코드는 for문을 사용하지 않고 generator의 다음 iteration을 수행한 후, 그 값을 바로 yield하므로서 가독성을 높이는 효과를 준다.
yield from
이 지원되지 않던 때에 위와 같은 코드를 작성하려면, itertools
모듈을 통해 chain
이라는 함수를 사용하여야만 했다. python 3.3 이상 버전을 이용하는 코드에서는 꼭 yield from
을 사용하도록 하자.
다음 코드는 python 3.3 미만 버전에서 itertools.chain
을 이용하여 두개의 generator를 묶어 사용하는 예시이다.
from itertools import chain
def generator():
for v in chain(generator2(), generator3()):
yield v
'-software > python' 카테고리의 다른 글
<파이썬> generator & yield (0) | 2018.12.07 |
---|---|
<WebGL> 그림판 만들기 (0) | 2016.09.30 |
<파이썬> 파일명, 경로 변경하기 (0) | 2016.08.26 |
<파이썬> Tkinter - GUI 예제 (4) | 2016.05.30 |
<파이썬> random과 배열, 생태계 개체수 예측하기 (0) | 2016.05.09 |