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]])