Published on

9단계: 고급 문법 (람다, 컴프리헨션, 제너레이터)

9-1. 람다 함수

이름 없이 간단하게 함수를 정의할 때 사용합니다.

add = lambda x, y: x + y
print(add(3, 5))  # 8

함수 인자로도 자주 사용됩니다:

data = [3, 1, 4]
print(sorted(data, key=lambda x: -x))

9-2. 리스트 컴프리헨션

squares = [x * x for x in range(5)]
print(squares)  # [0, 1, 4, 9, 16]

조건 필터링:

even = [x for x in range(10) if x % 2 == 0]

9-3. 딕셔너리 컴프리헨션

words = ["apple", "banana", "cherry"]
length_map = {w: len(w) for w in words}

9-4. 집합 컴프리헨션

unique_lengths = {len(w) for w in words}

9-5. 제너레이터 함수와 yield

def count_up(n):
    i = 0
    while i < n:
        yield i
        i += 1

for val in count_up(3):
    print(val)

9-6. 제너레이터 표현식

squares = (x * x for x in range(5))
for s in squares:
    print(s)

9-7. 이터레이터 프로토콜

  • __iter__()__next__() 메서드 구현 시 사용자 정의 반복자 생성 가능
class Counter:
    def __init__(self, max):
        self.max = max
        self.cur = 0

    def __iter__(self):
        return self

    def __next__(self):
        if self.cur >= self.max:
            raise StopIteration
        self.cur += 1
        return self.cur - 1

요약

  • 람다는 한 줄 함수, 간단한 로직 처리에 적합
  • 컴프리헨션은 반복/조건을 한 줄로 표현
  • 제너레이터는 lazy 반복 구조로 메모리 효율이 높음
  • 이터레이터 프로토콜을 구현해 커스텀 반복 객체 생성 가능

심화학습

Q1. 람다 함수는 언제 사용하고, 언제 피해야 할까요?
A1. 짧고 단순한 연산에 적합하지만, 복잡한 로직에는 가독성이 떨어져 일반 함수가 더 낫습니다.


Q2. 리스트 컴프리헨션이 반복문보다 유리한 상황은?
A2. 한 줄로 작성 가능하며, 속도와 가독성이 뛰어난 경우입니다. 단, 너무 복잡해지면 오히려 비권장됩니다.


Q3. 제너레이터의 가장 큰 장점은 무엇인가요?
A3. 메모리를 거의 쓰지 않고 큰 데이터를 순차적으로 처리할 수 있어 대용량 처리에 매우 효율적입니다.