topic난이도 · 약 20

함수 · 람다 · 컴프리헨션

`def` · `lambda` · 리스트/딕셔너리 컴프리헨션 · `filter`/`map`/`reduce`.

#Python#람다#컴프리헨션#실기핵심
왜 배우는가

컴프리헨션 결과 예측은 실기 코드 추적의 필수 유형이다. 특히 조건부 컴프리헨션(`if`)과 중첩 컴프리헨션이 함정 문제로 자주 나온다.

Python은 함수를 일급 객체로 다룬다. 변수에 담고, 다른 함수의 인자로 전달하고, 반환값으로 돌려줄 수 있다. 이 특성을 극대화한 문법이 람다컴프리헨션이다.

컴프리헨션 형식 — `[표현식 for 변수 in 반복가능 if 조건]`. `if`를 뒤에 붙이면 필터, `if-else`를 표현식 자리에 쓰면 변환이다. 위치에 따라 의미가 완전히 달라진다.

`if`만 있으면 필터링, `if-else`가 있으면 변환이다. 시험에서 위치를 바꿔 함정으로 낸다.

실기 드릴 5문항
code실기 드릴 · 코드 추적

다음 Python 코드의 출력은?

python
result = [x*x for x in range(6) if x%2 == 0]
print(result)
code실기 드릴 · 코드 추적

다음 Python 코드의 출력은?

python
def fib(n):
    if n < 2:
        return n
    return fib(n-1) + fib(n-2)

print(fib(7))
code실기 드릴 · 코드 추적

다음 Python 코드의 출력은?

python
nums = [1, 2, 3, 4, 5]
out = list(map(lambda x: x * 3, filter(lambda x: x > 2, nums)))
print(out)
code실기 드릴 · 코드 추적

다음 Python 코드의 출력은?

python
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flat = [x for row in matrix for x in row]
print(flat)
code실기 드릴 · 코드 추적

다음 Python 코드의 출력은?

python
def solve(n):
    return n * 2 if n > 0 else 0

print([solve(x) for x in [-1, 0, 1, 2, 3]])