[Fluent Python] 2장 : 제너레이터 표현식

hyunsu kim·2022년 10월 24일
0

Fluent Python

목록 보기
4/5
post-thumbnail

튜플, 배열 등의 시퀀스형을 초기화하려면 지능형 리스트를 사용할 수도 있지만, 다른 생성자에 전달할 리스트를 통째로 만들지 않고 반복자 프로토콜을 이용해서 항목을 하나씩 생성한븐 제너레이터 표현식은 메모리를 더 적게 사용한다.
제너레이터 표현식은 지능형 리스트와 동일한 구문을 사용하지만, 대괄호 대신 괄호를 사용한다. 아래 예제는 튜플과 배열을 생성하는 기본적인 제너레이터 표현식이다.

# 1. 제너레이터 표현식에서 튜플과 배열 초기화하기 

symbols = '@#$%^'

tuple(ord(symbol) for symbol in symbols)

#제너레이터 표현식이 함수에 보내는 단 하나의 인수라면 괄호 안에 괄호를 넣을 필요는 없다.

import array

array.array('I', (ord(symbol) for symbol in symbols))

# 배열 생성자는 인수를 두 개 받으므로 제너레이터 표현식 앞뒤에 반드시 괄호를 넣어야 한다. 배열 생성자
의 첫 번째 인수는 배열에 들어 갈 숫자들을 저장할 자료형을 지정한다.

다음 예제는 데카르트 곱에 제너레이터 표현식을 사용해서 두 가지 색상과 세 가지 크기의 티셔츠 목록을 출력한다. 앞선 예제와 달리 여기서는 티셔츠 리스트의 여섯 개 항목을 메모리 안에 생성하지 않는다. 제너레이터 표현식은 한 번에 한 항목을 생성할 수 있도록 for 루프에 데이터를 전달하기 때문이다. 데카르트 곱을 만들기 위해 사용할 리스트에 각각 천 개의 항목이 들어 있는 경우 제너레이터 표현식을 사용하면 단지 for 루프에 전달하기 위해 항목이 백만 개 들어 있는 리스트를 생성하는 일을 피할 수 있다.

# 2. 제너레이터 표현식에서의 데카르트 곱

colors = ['black', 'white']
sizes = ['S', 'M', 'L']
for tshirt in ('%s %s' % (c, s) for c ion colors for s in sizes):
    print(tshirt)

# 제너레이터 표현식은 한 번에 하나의 항목을 생성하며, 6개의 티셔츠의 종류를 담고 있는 리스트는 만들지 않는다.
profile
정리공간

0개의 댓글