바이브코더를 위한 파이썬 기초

바이브코더를 위한 파이썬 기초 7편: 함수, print와 return은 다르다

파이썬 함수: def로 만들기, 매개변수와 기본값, print와 return의 차이. return이 없으면 None이 되는 이유와 AI 코드를 함수 단위로 읽고 시험하는 법을 정리했다.

바이브코더를 위한 파이썬 기초 7편: 함수, print와 return은 다르다

AI가 짜 준 코드를 열면 def로 시작하는 덩어리가 여러 개 보인다. 함수다. 함수를 읽을 줄 알면 긴 코드도 "이 부분은 세금을 계산하고, 저 부분은 결과를 저장한다"처럼 덩어리 단위로 이해할 수 있다. 이 글은 '바이브코더를 위한 파이썬 기초' 10편 중 7편으로, def, 매개변수와 기본값, 그리고 초보가 자주 헷갈리는 print와 return의 차이를 다룬다. 예제는 Python 3.15 기준으로 설명하며 Python 3.14.2에서 실행해 결과를 확인했다.

어두운 배경 위 깔때기로 재료가 들어가 아래 받침으로 하나의 빛나는 결과물이 나오는 작은 기계 일러스트

핵심 요약

  • 함수는 입력을 받아 결과를 돌려주는 이름 붙은 코드 묶음이다. def 이름(매개변수):로 만든다.
  • print는 화면에 보여 줄 뿐이고, 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 코드에서 함수를 읽는 법

  1. 이름을 읽는다. load_data, calculate_total, save_result처럼 동사로 시작하는 이름이 많다. 이름만으로 하는 일을 짐작한다.
  2. 입력을 본다. 괄호 안 매개변수가 무엇인지, 기본값이 있는지 본다.
  3. return을 찾는다. 무엇을 돌려주는지 확인한다. return이 없으면 None을 돌려준다.
  4. 따로 시험한다. 함수 하나만 떼어 print(add_tax(1000))처럼 불러 보면, 긴 프로그램 전체를 돌리지 않고도 그 함수가 맞는지 확인할 수 있다.

AI에게 요청할 때도 함수 단위로 말하면 결과가 깔끔해진다. "평균을 구하는 average(nums) 함수를 만들어 줘. 값은 return으로 돌려주고, 출력은 함수 밖에서 해 줘."

스스로 확인하기

  1. return 없이 print만 하는 함수를 result = say_hi("지수")로 부르면 result는? → None. 화면에 보인 문장을 돌려준 값으로 착각하기 쉽다.
  2. 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

이전 편과 다음 편

시리즈 전체 목록은 10편 끝에 모아 두었다.

목록으로