python

python / 제너레이터(Generator)를 알아봅시다~!

디자인혭 2023. 11. 16. 17:02

<제너레이터(Generator)>
함수를 이용해서 이터레이터(반복)의 기능을 구현
이터레이터와 동일하게 호출 시점에만 메모리를 사용하고 사용이 끝나면 소멸됩니다.
반환할 때 사용하는 명령어는 return이 아닌, yield를 사용합니다.
이터레이터와 동일하게 전체 또는 next() 한건씩 출력 가능합니다.

 

 

 

<예제> 제너레이터 기본 문법

def simple_generator() :
    ###첫번째 반환할 값
    yield 1

    ###두번째 반환할 값
    yield 2

    ###세번째 반환할 값
    yield 3
### 제너레이터 전체 출력하기
# - 제너레이터에서는 함수를 객체로 인지하고 사용합니다.
# - 함수를 생성한다는 의미 또는 제너레이터 객체를 생성한다는 의미를 사용합니다.
# - 끝내는 말이 따로 없고 yield 갯수만큼 실행되고 끝!
for v in simple_generator() :
    print(v)

결과값>

1

2

3

 

 

 

<예제> 1부터 5까지 숫자를 생성해서 반환하는 제너레이터 만들기

### 함수이름 number_generator
def number_ganerator() :
    for i in range(1,6):
        yield i
### 전체 출력하기
### - 함수 객체 생성하기
gen = number_ganerator()
for num in gen:
    print(num)

결과값>

1

2

3

4

5

### - 함수 객체 생성하기
gen = number_ganerator()

### 한건씩 출력하기
try:
    print(next(gen))
    print(next(gen))
    print(next(gen))
    print(next(gen))
    print(next(gen))
    print(next(gen))
except:
    pass

결과값>

1

2

3

4

5

 

 

 

<예제> 파일 한줄씩 읽어서 반환하는 제너레이터 만들기

### read_lines 함수 생성
def read_lines(file_path) :
    ###파일처리 시 이터레이터와 다르게, with문을 사용해도 됩니다.
    with open(file_path, 'r', encoding="UTF-8") as file :
        for line in file :
            yield line.strip()
### 제너레이터 함수 생성하기
gen = read_lines("./04_example.txt")
for line in gen :
    print(line)

결과값>

안녕하세요~^^
프로그램은 재미있어요..
오늘 비가 많이 와요..
추워요...우띠~%%

반응형