컴프리헨션은 변환과 필터를 한 식으로 적는다. 목록, 집합, 딕셔너리마다 문법이 있다.
squares = [n * n for n in range(10) if n % 2 == 0]
by_name = {p.name: p for p in pieces}
unique = {word.lower() for word in words}괄호를 쓰는 생성식은 모든 결과를 메모리에 만들지 않고 하나씩 생산한다.
total = sum(n * n for n in range(1_000_000))함수 호출의 유일한 인자가 생성식이면 괄호를 한 겹 더 쓰지 않아도 된다. 생성식은 한 번 소비하면 비어 있다. 같은 데이터를 다시 읽으려면 생성식을 다시 만들거나 목록으로 보관한다.
컴프리헨션 내부 변수는 Python 3에서 바깥 범위로 새지 않는다. 반대로 컴프리헨션 안에서 외부 객체를 변경하는 부수 효과는 피한다. 결과를 만드는 식이어야 의도가 선명하다.
댓글
0개아직 댓글이 없습니다.