Python 강좌 / 함수 정의하고 값 반환하기
함수는 이름을 붙인 처리 단위이며 매개변수로 입력을 받고 return으로 결과를 돌려줍니다. 화면에 출력하는 것과 값을 반환하는 것은 다르므로 계산과 출력의 역할을 구분하면 재사용하기 쉽습니다.
매개변수·인수·반환값
def 뒤에 함수 이름과 매개변수를 적고 들여쓴 본문을 작성합니다. 매개변수는 함수가 받는 이름이고 인수는 호출할 때 전달한 실제 값입니다. 함수 정의만으로 본문이 실행되지는 않습니다. return을 실행하면 해당 함수 호출을 끝내며 return이 없거나 값이 없으면 None을 반환합니다.
관련 동작과 지원 조건은 Python: controlflow에서 확인할 수 있습니다.
계산 함수 안에서 print만 하면 다른 계산이나 테스트에 결과를 쓰기 어렵습니다. 계산한 값을 반환하고 호출한 쪽에서 출력하면 같은 로직을 명령줄·웹·테스트에서 사용할 수 있습니다.
함수 호출 규칙과 이름의 범위은 위치·키워드 인수와 기본값 사용하기 및 변수의 범위와 변경 가능한 객체의 동작 이해하기에서 사용하는 규칙과 연결됩니다.
전체 예제와 실행 결과
별도의 실습 폴더에서 아래 파일을 UTF-8로 저장합니다. 가상환경을 선택한 터미널에서 python functions.py 명령으로 실행합니다. macOS·Ubuntu에서 가상환경을 사용하지 않는 경우 명령 이름을 python3으로 바꿉니다.
functions.py 파일의 전체 내용입니다.
def total_with_fee(amount, fee):
"""금액과 수수료의 합계를 반환합니다."""
return amount + fee
first = total_with_fee(8000, 500)
second = total_with_fee(3500, 0)
print(first, second)
print(first + second)
예상 결과는 다음과 같습니다.
8500 3500
12000
함수의 책임과 전제 정하기
위 함수는 두 값이 더할 수 있는 수라는 전제만 가집니다. 음수를 허용하는지, 원 단위 정수만 허용하는지 등의 규칙은 별도로 정해야 합니다. 모든 함수가 모든 입력을 처리하도록 만들기보다 경계에서 검증하고 내부 함수의 계약을 명확히 할 수 있습니다.
함수 이름은 수행하는 일을 드러내고 한 함수가 입력·계산·파일 저장을 모두 처리하도록 비대해지지 않게 합니다. 문서 문자열은 무엇을 반환하고 어떤 전제나 예외가 있는지 설명하는 데 씁니다.
return은 호출자에게 값을 돌려주고 함수를 끝냅니다. print는 화면에 표시할 뿐이며 print 호출 자체의 반환값은 None입니다. 합계를 다른 계산이나 테스트에서 재사용하려면 함수가 return하고 출력은 호출부가 맡도록 나눕니다.
| 기능 | 결과 | 관찰 |
|---|---|---|
| return total | 호출자에게 total 전달 | 출력 없음 |
| print(total) | None | 화면에 표시 |
호출 결과 확인과 실패 지점 찾기
- fee를 500에서 1000으로 바꿔 첫 결과가 9000인지 확인합니다.
- return을 print로 바꾸면 first가 어떤 값이 되는지 확인하고 원래대로 복구합니다.
- 함수 정의보다 먼저 호출하면 이름을 찾을 수 없는지 확인합니다.
함수 내부에서 만든 지역 변수는 보통 함수 밖에서 직접 읽을 수 없습니다. 필요한 값은 반환하고, 외부 상태를 몰래 바꾸는 방식은 최소화합니다. 인수가 부족하면 TypeError가 발생하므로 정의와 호출의 항목 수를 비교하세요.




