Python 함수와 lambda 표현식, 재귀 함수
요약
Python 함수 정의, 기본 매개변수, lambda 표현식과 map 함수, type() 자료형 비교, 재귀 함수까지. 정보처리기사 실기에 출제되는 함수 관련 핵심 개념을 정리합니다.
함수 핵심 정리
| 개념 | 설명 | 예시 |
|---|---|---|
| 함수 정의 | def 키워드로 함수를 정의 | def add(a, b): return a + b |
| 기본 매개변수 | 인자를 생략할 경우 사용되는 기본값 | def func(num1, num2=2) |
| lambda | 이름 없는 익명 함수를 한 줄로 표현 | lambda x: x + 100 |
| map() | 함수와 iterable을 받아 각 요소에 함수 적용 | map(lambda x: x + 1, lst) |
| type() | 값의 자료형을 반환 | type(3) == type(100) |
| 재귀 함수 | 함수가 자기 자신을 호출하는 함수 | def f(n): return 1 if n==1 else n*f(n-1) |
함수 정의와 호출 쌩기초
Python에서는 def 키워드로 함수를 정의합니다. 함수 이름 뒤에 매개변수 목록을 괄호 안에 작성하고, 본문은 들여쓰기로 구분합니다.
기본 구조
예시
return 문은 함수의 반환값을 지정합니다. return이 없으면 None을 반환합니다.
기본 매개변수 (Default Parameter) 기초
매개변수에 기본값을 지정하면, 호출 시 해당 인자를 생략할 수 있습니다.
기본값 지정 방법
num2=2처럼 =으로 기본값을 지정합니다.
인자를 생략하거나 전달하는 경우
| 호출 방식 | num1 | num2 | 출력 |
|---|---|---|---|
func(3) | 3 | 2 (기본값) | 5 |
func(3, 10) | 3 | 10 | 13 |
lambda 표현식 기초
lambda는 이름 없는 익명 함수를 한 줄로 정의하는 문법입니다.
lambda 기본 형식
def와 lambda 비교
lambda는 단일 표현식만 사용할 수 있으며, 복잡한 로직이 필요할 때는 def를 사용합니다.
매개변수가 여러 개인 경우
map 함수 기초
map() 함수는 함수와 iterable(리스트, 튜플 등)을 받아 각 요소에 함수를 적용한 결과를 반환합니다.
map 기본 형식
map()은 map 객체를 반환하므로, 리스트로 변환하려면 list()를 사용합니다.
lambda와 함께 사용하기
각 요소에 lambda 함수를 적용하여 새로운 리스트를 만듭니다.
처리 흐름
| 원본 요소 | lambda num: num + 100 | 결과 |
|---|---|---|
| 1 | 1 + 100 | 101 |
| 2 | 2 + 100 | 102 |
| 3 | 3 + 100 | 103 |
| 4 | 4 + 100 | 104 |
| 5 | 5 + 100 | 105 |
type() 함수로 자료형 비교 심화
type() 함수는 값의 자료형(데이터 타입)을 반환합니다.
기본 사용법
자료형 비교
type()의 반환값끼리 ==로 비교하면 같은 자료형인지 확인할 수 있습니다.
조건문에서 자료형 판별
재귀 함수 심화
재귀 함수는 함수의 본문에서 자기 자신을 호출하는 함수입니다. 같은 작업을 더 작은 입력으로 반복할 때 사용합니다.
재귀 함수의 두 가지 부분
재귀 함수는 항상 다음 두 부분으로 이루어집니다.
| 부분 | 설명 |
|---|---|
| 기저 조건 (base case) | 더 이상 자기 자신을 호출하지 않고 즉시 반환하는 조건 |
| 재귀 호출 (recursive case) | 더 작은 입력으로 자기 자신을 다시 호출 |
예시 1: 1부터 n까지의 합
호출 흐름은 다음과 같이 펼쳐집니다.
n == 1에 도달하면 기저 조건이 작동하여 1을 반환하고, 안쪽 호출부터 차례대로 값을 거슬러 계산합니다.
예시 2: 트리 구조 합산
__init__으로 만든 노드 클래스의 자식 목록을 따라 내려가며 모든 값을 더할 때도 재귀를 사용합니다.
tree_sum은 자식 노드마다 자기 자신을 다시 호출하여, 가장 깊은 노드까지 내려간 뒤 결과를 모두 더해 올려줍니다. 자식이 없는 노드(node.c == [])에서는 for문이 한 번도 실행되지 않으므로 자연스럽게 기저 조건이 됩니다.