일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- dict
- SSA
- 카톡
- MongoDB
- 중급파이썬
- S3
- react
- async
- lambda
- git
- TypeScript
- pandas
- merge
- node
- EC2
- crud
- docker
- flask
- 튜플
- AWS
- 채팅
- Props
- 파이썬
- socket io
- SAA
- Class
- NeXT
- wetube
- RDS
- Vue
- Today
- Total
초보 개발자
10강 제너레이터 표현식 본문
앞서 제너레이터 객체를 생성하는 방법에 2가지가 있다고 하였고 제너레이터 함수를 사용하여 생성하는 방법을 포스팅하였는데 이번에는 제너레이터 표현식에 대해서 설명해보려고 한다.
st = [2*i for i in range(1,10)] #구구단 2단을 전부 저장한 리스트 생성
st = (2*i for i in range(1,10)) 2단을 반환하는 제너레이터 생성
( ) 소괄호 안에 저렇게 적어주면 간단하게 제너레이터 표현식이 완성된다. [] 로 감싸주면 리스트 컴프리헨션이지만
( )로 감싸주면 제너레이터 표현식이 된다. 튜플 컴프리헨션이 아닐까..? 하는 의심이 들지만 제너레이터 표현식이다.
next(st)를 하면 2가 출력이 되고 그다음
next(st)를 하면 4 ....
마지막에는 18
그 이후에는 StopIteration이 출력이 된다.
이걸 함수식으로 만들면 아래와 같다.
def time2()
for i in range(1,10):
yield 2 * i
g = time2() # 제너레이터 객체의 생성
show_all(g) # for 루프로 print 하는 함수이다.
2 4 6 8 10 12 14 16 18
def two()
print('two') # two 함수 호출 시에 two라는 문자열 출력
return 2
g = (two() * i for i in range(1,10)) # 이때 two 함수 호출 안됨
next(g)
two
2
next(g)
two
4
이 예제를 만들기 위해서 next 함수 호출 시마다 문자열 two가 하나씩 출력되었다는 것은 next함수가 호출 되는 순간!!에 던져줄 값이 만들어진 증거로 볼 수 있다. 만약 리스트 컴프리헨션이었다면 two가 10번이 호출이 되었을 것이지만 제너레이터 표현식 ( ( )로 감쌈 )이기 때문에 미리 만들어 진 것이 아니고 next를 호출 했을 경우에만 two가 호출이 된 것을 볼 수 있다.
( two() * i ) 연산이 next를 누를 때마다 실행이 되었음
[제너레이터 표현식을 직접 전달하기]
def show_all(s):
for i in s:
print(i, end = ' ')
show_all((2 * i for i in range(1,10))) # 제너레이터 표현식을 직접 전달
2 4 6 8 10 12 14 16 18
전에는 show_all( st ) 이런식으로 st를 따로 제네레이터 객체에 참조시킨다음에 그 변수를 집어 넣었다면
이번에는 한번에 집어 넣은 것이다. 이렇게 바로 전달할 수도 있다.
이 경우 소괄호가 두 번 겹쳐져서 보기 불편하다. 그래서 이렇듯 함수에 제너레이터 표현식을 바로 전달할 경우에는 다음과 같이 소괄호를 생략할 수 있다. -> 함수를 호출하는 소괄호를 생략할 수 있다.
show_all(2*i for i in range(1,10)) # 위에서 정의한 show_all 호출
2 4 6 8 10 12 14 16 18
전달 인자에 제너레이터 표현식이 왔으니까 소괄호가 생략이 되었구나 라고 생각을 하자!!
'Python > 윤성우 열혈 파이썬' 카테고리의 다른 글
12강 네임드 튜플 (0) | 2021.12.22 |
---|---|
11강 튜플의 패킹과 언패킹 (0) | 2021.12.22 |
9강 제너레이터 함수 (0) | 2021.12.16 |
8강 map과 filter를 대신하는 리스트 컴프리헨션 (0) | 2021.12.16 |
7강 map & filter (0) | 2021.12.16 |