Menu

파이썬 함수: def, return, 기본 인자와 키워드 인자

파이썬에서 함수를 정의하고 쓰는 법 — 매개변수, 반환값, 기본 인자, 키워드 인자, 그리고 코드를 읽기 좋게 유지하는 명명 습관까지.

함수는 이름이 붙은 단계 묶음이에요

같은 몇 줄을 두 번 이상 쓰고 있거나 — 작은 로직 덩어리에 이름을 붙이고 싶어지는 순간이라면 — 함수를 쓸 준비가 된 거예요. 함수는 파이썬 프로그램에서 복잡도를 관리하는 첫 번째 실전 도구입니다.

기본 모양:

main.py
Output
Click Run to see the output here.

하나씩 뜯어 보면:

  • def는 함수 정의를 시작하는 키워드예요.
  • greet는 함수 이름이고요.
  • (name)은 매개변수 목록 — 함수가 받는 입력이에요.
  • 콜론으로 헤더가 끝나고, 그 아래 들여쓰기된 블록이 본문이에요.
  • greet("Ada")는 _호출_이에요. 파이썬이 name"Ada"에 묶은 채로 본문을 실행합니다.

함수는 호출되기 전까지 잠들어 있어요. 정의해도 실행되지 않아요. greet("Ada")로 호출해야 비로소 돌아갑니다.

매개변수와 인자

매개변수(parameter) 는 함수 정의 안에 있는 이름이에요. 인자(argument) 는 호출할 때 넘기는 값이고요. 일상 대화에선 별거 아니지만, 에러 메시지를 읽을 때 이 구분이 도움이 돼요.

main.py
Output
Click Run to see the output here.

여기서 baseexponent가 매개변수, 210이 인자예요. 파이썬은 순서대로 바인딩해요: 첫 인자가 첫 매개변수로, 하는 식으로.

return: 값 돌려주기

print는 화면에 찍고, return은 호출자에게 값을 돌려줘서 쓸 수 있게 해줍니다:

main.py
Output
Click Run to see the output here.

return이 없으면 함수는 기본적으로 None을 반환해요:

main.py
Output
Click Run to see the output here.

return은 함수를 즉시 종료시키기도 해요. 본 로직에 들어가기 전에 경계 상황에서 조기 리턴하는 패턴을 자주 보게 됩니다:

main.py
Output
Click Run to see the output here.

조기 리턴은 본문이 if/else로 깊게 중첩되지 않게 해 줍니다.

기본 인자

매개변수에는 기본값을 줄 수 있어요. 호출자가 값을 주지 않으면 그게 쓰입니다:

main.py
Output
Click Run to see the output here.

기본값이 있는 매개변수는 기본값 없는 매개변수 뒤에 와야 해요. def f(a, b=1, c):는 문법 오류입니다.

가변 기본값 함정

파이썬의 가장 유명한 함정이에요. 보세요:

main.py
Output
Click Run to see the output here.

매 호출이 빈 리스트로 시작할 거라 기대하시겠지만, 기본 리스트가 호출 간에 공유돼서 아이템이 쌓여요. 파이썬은 기본값을 함수가 정의될 때 한 번 평가하고, 그 하나의 리스트를 계속 재사용해요.

안전한 패턴은 기본값으로 None을 쓰고 함수 안에서 리스트를 만드는 거예요:

main.py
Output
Click Run to see the output here.

이제 items를 넘기지 않은 호출은 매번 새 리스트를 받아요. 이 규칙은 리스트, 딕셔너리, 집합 — 모든 가변 타입에 적용돼요.

키워드 인자

위치 대신 이름으로 인자를 넘길 수 있어요. 중간 매개변수를 건너뛰거나 긴 호출을 읽기 좋게 만들 수 있게 해줍니다:

main.py
Output
Click Run to see the output here.

위치 인자와 키워드 인자를 섞을 수 있는데, 위치 인자가 반드시 먼저 와야 해요:

main.py
Output
Click Run to see the output here.

매개변수가 서너 개를 넘으면 키워드 인자를 선호하는 쪽이 호출을 훨씬 읽기 쉽게 만들어줘요.

위치 전용 · 키워드 전용 매개변수

파이썬에서는 일부 매개변수를 위치로만(/ 사용) 또는 키워드로만(* 사용) 넘기게 제한할 수 있어요:

main.py
Output
Click Run to see the output here.

첫날부터 필요한 건 아니에요. API를 설계하면서 호출자가 어떻게 써야 하는지 잠가두고 싶을 때 유용합니다.

Docstring과 이름 짓기

함수 안의 첫 줄은 docstring이 될 수 있어요 — 파이썬이 문서로 취급하는 삼중 따옴표 문자열이에요:

main.py
Output
Click Run to see the output here.

help(), IDE 툴팁, 문서 생성기 같은 도구들이 docstring을 자동으로 읽어줘요. 한 줄짜리라도 없는 것보다 훨씬 낫습니다.

그리고 제발, 이름은 신경 써서:

  • 함수 이름은 동사예요: fetch_profile, compute_total, is_valid.
  • lower_snake_case를 쓰세요.
  • 불리언을 반환하는 함수는 보통 is_, has_, can_으로 시작해요.

좋은 이름은 호출하는 자리가 주석 없이도 스스로를 설명하게 만듭니다.

순수 함수가 추론하기 더 쉬워요

순수(pure) 함수는 같은 입력에 대해 같은 출력을 내고, 사이드 이펙트가 없어요 — 전역 상태를 바꾸지 않고, (디버깅 목적 외에는) stdout에 출력하지 않고, 파일에 쓰지 않는다는 뜻이에요.

main.py
Output
Click Run to see the output here.

각자 자리가 있지만, 재사용하고 테스트하고 싶은 코드라면 가능한 한 순수 함수 쪽으로 밀어붙이세요.

작은 실전 예제

기본값, 키워드 인자, return을 한 번에 쓰는 함수:

main.py
Output
Click Run to see the output here.

다음: 유연한 인자 리스트

함수가 몇 개의 인자와 함께 호출될지 미리 알 수 없거나 — 들어온 인자를 그대로 다른 함수로 전달하고 싶은 경우가 있어요. *args**kwargs가 그걸 해결해 줍니다. 다음 페이지에서 다룹니다.

자주 묻는 질문

파이썬에서 함수는 어떻게 정의하나요?

def 키워드에 이어 함수 이름, 매개변수를 감싸는 괄호, 콜론을 씁니다. 아래 들여쓰기된 블록이 함수 본문이에요. 예: def greet(name): print(f'Hi, {name}').

파이썬에서 return은 뭘 하나요?

return은 함수를 호출한 쪽으로 값을 돌려줍니다. 명시적인 return이 없는 함수는 자동으로 None을 반환해요. return이 실행되는 순간 함수가 바로 종료돼서, 같은 블록 내 뒤에 있는 코드는 건너뛰어집니다.

파이썬에서 기본 인자가 뭔가요?

매개변수에 미리 정해 둔 값을 주어서, 호출자가 값을 주지 않으면 그 값이 쓰이게 하는 거예요. def greet(name='friend'):라면 greet()를 인자 없이 부르면 'friend'가 쓰여요. [] 같은 가변 기본값은 절대 쓰지 마세요 — 안전한 패턴은 아래에서 설명합니다.

Coddy로 코딩 배우기

시작하기