본문 바로가기
카테고리 없음

파이썬 함수 정의와 활용: 매개변수, 반환값, 람다

by BOOST YOUR INFORMATION 2026. 7. 16.

파이썬 함수 정의와 활용: 매개변수, 반환값, 람다
파이썬 함수 정의와 활용: 매개변수, 반환값, 람다

1. 기본 개요

파이썬에서 함수는 def 키워드로 정의하며, 코드를 재사용 가능한 단위로 묶는 가장 기본적인 도구입니다. 파이썬 공식 문서(Python 3 Tutorial, "Defining Functions")에 따르면, 함수는 매개변수(parameter)를 받아 특정 작업을 수행하고 return 문으로 결과값을 반환할 수 있습니다. return 문이 없거나 값 없이 return만 쓰인 경우, 함수는 None을 반환합니다.

함수 정의의 기본 구조는 다음과 같습니다.

def greet(name, greeting="안녕하세요"):
    return f"{greeting}, {name}님"

여기서 greeting="안녕하세요"처럼 매개변수에 초깃값을 지정하는 것을 기본값(default) 인자라고 합니다. 파이썬 공식 문서는 이 기본값이 함수가 "정의되는 시점"에 단 한 번만 계산된다는 점을 명시하고 있습니다. 이는 실무에서 매우 자주 발생하는 실수의 원인이 되는데, 리스트나 딕셔너리처럼 변경 가능한(mutable) 객체를 기본값으로 사용하면, 함수를 여러 번 호출할 때마다 그 객체가 계속 공유되어 예상치 못한 버그가 생길 수 있습니다.

람다(lambda)는 이름 없이 한 줄로 정의하는 익명 함수입니다. 파이썬 언어 레퍼런스(Language Reference, "Lambda expressions")에 의하면 람다식은 lambda 매개변수: 표현식 형태를 가지며, 오직 하나의 표현식만 가질 수 있고 return문이나 여러 줄의 문장(statement)은 포함할 수 없습니다. 즉 람다는 일반 함수의 축소판이 아니라, 표현식 하나만 계산해서 그 결과를 즉시 돌려주는 제한된 도구입니다.

2. 기능과 스펙

파이썬 함수가 지원하는 매개변수 방식은 크게 다음과 같이 나뉩니다.

  • 위치 인자(positional argument): 순서대로 전달되는 일반적인 인자
  • 키워드 인자(keyword argument): 이름=값 형태로 전달, 순서에 무관
  • 기본값 인자: 호출 시 값을 생략하면 정의된 기본값 사용
  • 가변 인자 *args: 임의 개수의 위치 인자를 튜플로 수집
  • 가변 키워드 인자 `kwargs`**: 임의 개수의 키워드 인자를 딕셔너리로 수집

함수는 값을 하나만 반환하는 것처럼 보이지만, 실제로는 여러 값을 콤마로 나열해 반환하면 파이썬이 이를 자동으로 튜플로 묶어 반환합니다. 예를 들어 return a, b(a, b)라는 튜플을 반환하는 것과 동일합니다.

람다는 sorted()key 인자, map(), filter() 등 다른 함수에 "일회성 함수"를 넘겨줄 때 흔히 사용됩니다. 예를 들어 sorted(students, key=lambda x: x[1])처럼 정렬 기준을 즉석에서 지정할 수 있습니다.

3. 장단점

장점

  • 코드 재사용성이 높아지고 중복을 줄일 수 있다
  • 기본값과 키워드 인자 덕분에 호출부가 유연하고 가독성이 좋아진다
  • 람다는 짧은 콜백이 필요할 때 별도 함수 정의 없이 간결하게 처리 가능하다

단점

  • 람다는 표현식 하나만 허용하므로 조건 분기가 복잡하거나 여러 줄이 필요한 로직에는 부적합하다
  • 가변 기본값(리스트, 딕셔너리 등)을 잘못 사용하면 여러 호출 간에 상태가 의도치 않게 공유되는 버그가 발생한다
  • 람다를 과도하게 남용하면 디버깅 시 스택 트레이스에 <lambda>로만 표시되어 어떤 코드인지 추적하기 어려워진다

개인적 견해 및 비판: 람다는 "간결함"이라는 장점 때문에 매력적으로 보이지만, 실무 코드베이스에서 람다가 두 줄 이상의 로직을 표현하려는 시도로 이어지면 오히려 가독성을 해치는 경우가 많습니다. 파이썬 커뮤니티 안에서도 "람다는 map/filter/sorted의 key 인자처럼 아주 짧고 명확한 경우에만 쓰라"는 의견이 다수이며, 개인적으로도 이름이 있는 일반 함수(def)로 바꾸는 것이 협업 환경에서는 더 안전하다고 봅니다. 반면 기본값 인자는 매우 실용적인 기능이지만, 초심자들이 가변 객체를 기본값으로 쓰다가 겪는 버그는 파이썬의 설계상 트레이드오프이며 이를 모르면 반드시 한 번은 겪게 되는 함정이라는 점도 짚고 넘어가야 합니다.

4. 추천 대상

  • 파이썬 문법을 처음 배우며 함수의 기본 구조를 익히려는 입문자
  • 코드 재사용과 모듈화를 고민하는 초·중급 개발자
  • map, filter, sorted 등 함수형 스타일 코드를 자주 다루는 데이터 처리 실무자

5. FAQ

Q1. 함수의 매개변수와 인자(argument)는 같은 말인가요?
엄밀히는 다릅니다. 매개변수는 함수를 정의할 때 선언하는 변수명이고, 인자는 함수를 호출할 때 실제로 전달하는 값입니다.

Q2. 람다 안에서 여러 줄의 코드를 쓸 수 있나요?
쓸 수 없습니다. 파이썬 언어 레퍼런스에 따르면 람다는 단일 표현식만 허용하며 if문, for문 같은 문장(statement)은 포함할 수 없습니다. 다만 삼항 표현식(a if 조건 else b)은 표현식이므로 사용할 수 있습니다.

Q3. 가변 기본값 문제는 어떻게 피하나요?
기본값을 None으로 두고, 함수 본문 안에서 if 매개변수 is None: 매개변수 = []처럼 처리하는 것이 일반적인 관행입니다.

6. 출처


소개 및 문의 · 개인정보처리방침 · 면책조항

© 2026 ⚡ 정보 부스터 🚀