글 목록으로 돌아가기

Python

함수

Python 함수 정의, 매개변수, lambda, map/filter/reduce, closure, decorator 정리

Dohyeon Kim
Dohyeon Kim 2026년 7월 7일 · 3분 읽기
Python AutoEverSW

1) 함수(Function)


함수란?

여러 문장을 하나의 이름으로 묶어 필요할 때 호출하는 코드 블록

장점: 코드 재사용, 중복 제거, 유지보수 향상, 가독성 향상

함수의 종류

종류 설명
내장 함수(Built-in) Python 기본 제공 (print, len, max, sum 등)
사용자 정의 함수 개발자가 직접 생성 (def 키워드)
3rd Party 함수 다른 개발자가 만들어놓은 함수(라이브러리)

함수 정의와 호출

def 함수이름(매개변수):
    실행문
    return 결과

result = add(10, 20)  # 호출

반환(Return)

  • 함수 종료 + 값 반환
  • return이 없으면 None 반환
  • 여러 값 반환 → 실제로는 Tuple 반환
def swap(a, b):
    return b, a

x, y = swap(10, 20)

2) 매개변수(Parameter)


기본값(Default Parameter)

def plus(a, b=1):
    return a + b

plus(5)  # 6

기본값 있는 매개변수 뒤에는 기본값 없는 매개변수가 올 수 없음

키워드 인수(Keyword Argument)

plus(b=10, a=20)  # 순서 관계없이 호출 가능

인수 전달 방식

타입 전달 방식 원본 영향
Scalar (int, float 등) 값 전달 함수 내 변경해도 원본 영향 없음
Vector (list, dict 등) 참조 전달 함수 내 수정 시 원본도 변경
# Scalar: 변경 없음
n = 10
def f(x):
    x = x + 1
f(n)
print(n)  # 10

# Vector: 원본 변경
li = [10, 20, 30]
def f(ar):
    ar[0] = 1000
f(li)
print(li)  # [1000, 20, 30]

3) 함수 고급


순수 함수(Pure Function)

  • 동일한 입력 → 항상 동일한 출력
  • 외부 상태 변경 없음 (Side Effect 없음)

Unpacking

# Sequence
def func(a, b): return a + b
func(*[10, 20])     # func(10, 20)

# Dict (키와 매개변수 이름 매핑)
func(**{"a": 10, "b": 20})

가변 매개변수

def total(*args):       # Tuple로 받음
    return sum(args)

def profile(**kwargs):  # Dict로 받음
    print(kwargs)

Docstring

def add(a, b):
    """두 수를 더한다."""
    return a + b
help(add)

Type Hint

def add(a: int, b: int) -> int:
    return a + b

4) 함수형 프로그래밍


lambda (익명 함수)

lambda x: x * x

# 일반 함수 동일
def f(x):
    return x * x

고차 함수

map — 모든 요소 변환

list(map(lambda x: x + 1, [1, 2, 3]))  # [2, 3, 4]

filter — 조건 만족 요소만 선택

list(filter(lambda x: x > 2, [1, 2, 3, 4]))  # [3, 4]

reduce — 모든 데이터를 하나로 누적

from functools import reduce
reduce(lambda x, y: x + y, [1, 2, 3, 4])  # 10

5) Scope


키워드 범위
(없음) Local: 함수 내부 변수
global 함수 외부 전역 변수 수정
nonlocal 중첩 함수에서 바깥 함수 변수 수정

6) Closure


함수를 리턴하여 외부 함수의 지역 변수를 기억

def calc():
    a = 3
    def mul(x):
        return a * x
    return mul

f = calc()
print(f(5))  # 15

7) Decorator


기존 함수를 수정하지 않고 기능을 추가

import time
def logging(func):
    def logged(*args):
        start = time.time()
        result = func(*args)
        elapsed = time.time() - start
        print(f"실행 시간: {elapsed}")
        return result
    return logged

@logging
def factorial(n):
    return 1 if n < 2 else n * factorial(n-1)

활용: 로깅, 실행 시간 측정, 인증, 캐싱

메모이제이션 (lru_cache)

from functools import lru_cache

@lru_cache()
def fibonacci(n):
    if n <= 2:
        return 1
    return fibonacci(n-1) + fibonacci(n-2)

댓글