* 여기까지가 어려운 부분.

 

 

 

지금까지 학습한 것을

확실히 이해하고 자유롭게

활용할 수 있도록 만들어야 한다!

 

 

 

이후로는 난이도가 내려간다고~

 

 

 

 


 

 

 

 

제너레이터는

 

 

 

 

반복자 이터레이터(iterator)와

같은 역할을 하는 함수로

 

 

 

반복되는 루프의 작용을 컨트롤하기 위해

쓰이는 특별한 함수 또는 구문을

뜻한다.

 

 

 

이터레이터란 반복 가능한 객체 즉,

반복문을 활용해 데이터를 순회하며

처리하는 것을 의미하고

 

 

 

리스트, 딕셔너리, 튜플 등 순회 가능한

객체들을 이터레이터 오브젝트

(iterator object)라고 부른다.

 

 

 

제너레이터는 호출 시 한 번에 모든 값을

리턴하지 않고yield구문을 이용해

한 번 호출할 때 하나의 값만을

리턴하고

 

 

 

일반 반복자에 비해 아주 작은 메모리를

필요로 하며 모든 결괏값을 메모리에

저장하지 않아 퍼포먼스 측에서 좋다.

 

 

 

 

 

 


 

 

 

 

사용법

 

 

 

 

 

 

 

 

 

 

1. 제너레이터를 호출 시

제너레이터라는 객체를 리턴함

 

 

 

이전 시간에 공부한 map 함수나

filter 함수가 각 함수를 호출 시

각 함수의 이름의 객체를 리턴했던

것처럼 제너레이터 역시 동일하다.

 

 

 

만들어진 함수를 변수에

담아 이를 출력하면 출력값이

<generator object..>

'제너레이터 객체'라고 출력된다.

 

 

 

때문에 함수 내부의 코드 내용을

출력하기 위해선 반드시 next라는

함수를 사용해야 하는데

 

 

위 예제 마지막을 보면 next 함수

사용 시 함수 내부의 코드들이

정상 출력되는 것을 볼 수 있다.

 

 

 

 


 

 

 

 

2. yield의 활용

 

 

 

return처럼

키워드 뒤에 값을 추가하여

들고 돌아오도록 할 수 있다.

 

 

 

 

 

 

 

 

위에 언급한 것처럼 yield는

호출 시 기본적으로 하나의

값만을 리턴한다.

 

 

 

때문에 여러 코드들이 있는 경우

이를 모두 출력하기 위해서는

next를 연달아 입력하는 방법과

반복문을 사용해 출력하는

방법이 있다.

 

 

 

1. next 연달아 입력 예)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. 반복문 활용 예 1

 

 

 

 

 

 

 

반복문만을 돌릴 경우 모든 코드들이

실행되며 만약 yield의 값들을 함께

출력해 주고 싶을 때는 i를 출력해 주면 된다.

( 현재 yield의 값들이 i 안에 모두 담겨있음)

 

 

 

 

 

 

 

 

 


 

 

 

 

3. 일회용 함수

 

 

 

 

제너레이터 함수는 이전에 공부한

reversed ( ) 함수와 같이 일회용 함수이다.

 

 

 

 

 

이터레이터 객체임을 확인할 수 있다.

 

 

 

 

 

 

일회용 함수 특성상 두 번을

호출하더라도 한 번만 응한다.

 

 

 

 

 

 

 

 

 

 

 

제너레이터 함수 또한

마찬가지로 일회용이기에

한 번만 호출이 가능하다.

 

 

 

 

 

 

 

 

 


 

 

 

 

 

*reversed 함수의 장점으로

메모리 절약을 언급했었다.

 

 

 

reversed를 호출하는 경우

새로운 리스트가 만들어지는 것이

아닌 iterator object, 이터레이터

객체가 만들어지는 것이기 때문.

 

 

 

예)

 

 

 

 

 

 

 

 

두 가지 방식으로 출력하고

있지만 메모리를 두 배 사용하는

것은 아니다!

 

 

 

 


 

 

 

 

 

 

파이썬으로 프로그램 개발하다가

막히는 대표적인 코드 문제 풀기

 

 

 

 

 

1. 코드를 채워 실행 결과처럼

출력되도록 만들기!

 

 

 

numbers = [1,2,3,4,5]

 

print( " : : ".join( ))

 

실행 결과

1 :: 2 :: 3 :: 4:: 5

 

 

 

 

 

 

 

 

 

 

 

 

 

2. 코드의 빈칸을 채워

실행 결과가 나오도록 만들기!

 

 

 

 

numbers = list(range(1, 10 +1)

 

print("# 홀수만 추출하기)

print(list(filter( , numbers)))

print( )

 

print("# 3 이상, 7 미만 추출하기)

print(list(filter( , numbers)))

print( )

 

print("# 제곱해서 50미만 추출하기)

print(list(filter( , numbers)))

 

 

 

실행 결과

[1, 3, 5, 7, 9]

[3, 4, 5, 6]

[1, 2, 3, 4, 5, 6, 7]

 

 

 

 

 

 

 

 

728x90

'프로그래밍 > Python' 카테고리의 다른 글

기초) 예외 처리 추가  (0) 2020.06.02
기초) 오류에 대하여 / try, exeption  (0) 2020.06.01
기초) 텍스트 파일 처리 기본  (1) 2020.05.31
기초) 람다 / map & filter 함수  (0) 2020.05.30
기초) 튜플 정리  (0) 2020.05.30

+ Recent posts