바이브코더를 위한 파이썬 기초 7편: 함수, print와 return은 다르다
파이썬 함수: def로 만들기, 매개변수와 기본값, print와 return의 차이. return이 없으면 None이 되는 이유와 AI 코드를 함수 단위로 읽고 시험하는 법을 정리했다.
AI가 짜 준 코드를 열면 def로 시작하는 덩어리가 여러 개 보인다. 함수다. 함수를 읽을 줄 알면 긴 코드도 "이 부분은 세금을 계산하고, 저 부분은 결과를 저장한다"처럼 덩어리 단위로 이해할 수 있다. 이 글은 '바이브코더를 위한 파이썬 기초' 10편 중 7편으로, def, 매개변수와 기본값, 그리고 초보가 자주 헷갈리는 print와 return의 차이를 다룬다. 예제는 Python 3.15 기준으로 설명하며 Python 3.14.2에서 실행해 결과를 확인했다.
핵심 요약
- 함수는 입력을 받아 결과를 돌려주는 이름 붙은 코드 묶음이다.
def 이름(매개변수):로 만든다.return은 호출한 쪽에 값을 건네준다. 둘은 다르다.return이 없는 함수는None을 돌려준다.rate=0.1처럼 기본값을 준 매개변수는 호출할 때 생략할 수 있다.
함수는 자판기다
자판기에 돈을 넣고 버튼을 누르면(입력) 음료가 나온다(결과). 안에서 무슨 일이 일어나는지 몰라도 쓸 수 있다. 함수도 이름과 입력, 결과만 알면 쓸 수 있다.
믹서기 비유도 자주 쓰지만 한계가 있다. 믹서기는 결과를 눈앞에 쏟아내지만, 함수의 return은 호출한 쪽에 값을 건네줄 뿐 화면에는 아무것도 보이지 않는다. 화면에 보이게 하려면 따로 print를 해야 한다.
함수 만들고 부르기
def add_tax(price, rate=0.1):
return round(price * (1 + rate))
print(add_tax(1000))
print(add_tax(1000, 0.05))
def say_hi(name):
print(f"안녕, {name}!")
result = say_hi("지수")
print(result)
1100
1050
안녕, 지수!
None
읽는 법은 이렇다.
def add_tax(price, rate=0.1):은 "price와rate를 받는add_tax라는 함수를 만든다"는 뜻이다. 괄호 안의 이름을 매개변수라고 한다.rate=0.1은 기본값이다.add_tax(1000)처럼rate를 생략하면 0.1이 쓰인다.return round(...)는 계산 결과를 반올림해 돌려준다. 파이썬의round는 딱 .5일 때 가까운 짝수 쪽으로 맞춘다는 점도 알아 두자(round(2.5)는 2). 그래서print(add_tax(1000))은 1100을 출력한다.say_hi는 화면에 인사만 출력하고 아무것도 돌려주지 않는다. 그래서result는None이다.
흔한 함정: print하면 값을 돌려준 것일까
say_hi("지수")를 실행하면 화면에 "안녕, 지수!"가 보이니 그 문장을 돌려받은 것 같지만, result를 출력해 보면 None이다. 화면에 보인 것과 함수가 돌려준 것은 다르다.
이 차이는 AI 코드를 고칠 때 자주 문제가 된다. 예를 들어 AI가 평균을 print만 하는 함수를 만들었는데, 다른 코드에서 그 평균으로 등급을 매기려 하면(3편의 조건문) None과 숫자를 비교하게 되어 오류가 난다. 고치는 원칙은 이렇다.
- 다른 계산에 쓸 값은
return으로 돌려준다. - 화면 출력은 마지막에, 함수를 부르는 쪽에서 한다.
AI 코드에서 함수를 읽는 법
- 이름을 읽는다.
load_data,calculate_total,save_result처럼 동사로 시작하는 이름이 많다. 이름만으로 하는 일을 짐작한다. - 입력을 본다. 괄호 안 매개변수가 무엇인지, 기본값이 있는지 본다.
return을 찾는다. 무엇을 돌려주는지 확인한다.return이 없으면None을 돌려준다.- 따로 시험한다. 함수 하나만 떼어
print(add_tax(1000))처럼 불러 보면, 긴 프로그램 전체를 돌리지 않고도 그 함수가 맞는지 확인할 수 있다.
AI에게 요청할 때도 함수 단위로 말하면 결과가 깔끔해진다. "평균을 구하는 average(nums) 함수를 만들어 줘. 값은 return으로 돌려주고, 출력은 함수 밖에서 해 줘."
스스로 확인하기
return없이print만 하는 함수를result = say_hi("지수")로 부르면result는? →None. 화면에 보인 문장을 돌려준 값으로 착각하기 쉽다.def add_tax(price, rate=0.1)을add_tax(1000)으로 부르면rate는? → 0.1. 기본값이 있는 매개변수는 생략할 수 있다.
직접 해 보기
숫자 리스트를 받아 평균을 return하는 average(nums) 함수를 만들어 보자. average([80, 90, 100])이 90.0이면 성공이다. 막히면 sum(합계)과 len(개수)을 쓰고, print가 아니라 return을 썼는지 확인한다.
def average(nums):
return sum(nums) / len(nums)
print(average([80, 90, 100]))
90.0
이전 편과 다음 편
- 이전 글: 6편: 딕셔너리, 키로 값 찾기와 KeyError
- 다음 글: 8편: 오류 읽기에서는 함수가 실패했을 때 나오는 오류 메시지를 읽는 법과, AI에게 오류를 제대로 전달하는 법을 다룬다.
시리즈 전체 목록은 10편 끝에 모아 두었다.