edubun
한국어

함수 만들기

return 없이 끝나는 함수는 None을 돌려줍니다. 그래서 print(print("hi"))를 실행하면 hi 다음에 None이 나옵니다.

화면에서는 똑같아 보이는 두 함수

처음 배우는 사람은 대부분 값을 화면에 보여 주는 것과 값을 돌려주는 것이 같다고 생각합니다. 아래 두 함수는 둘 다 직사각형의 넓이를 「주는」 것처럼 보입니다. def로 함수를 정의하는데, 이름, 괄호 안의 입력, 콜론, 들여 쓴 본문 순서로 씁니다. 실행해 보면 출력 두 줄이 똑같아 보입니다.

def show_area(w, h):
    print(w * h)

def area(w, h):
    return w * h

show_area(4, 3)
print(area(4, 3))
출력
12
12

이번에는 결과를 계산에 써 보겠습니다. 차이가 바로 드러납니다.

def show_area(w, h):
    print(w * h)

def area(w, h):
    return w * h

a = show_area(4, 3)
b = area(4, 3)
print(a, b)
print(b * 2)
출력
12
None 12
24

show_area는 12를 화면에 출력하고 끝납니다. 아무것도 돌려주지 않는데, 돌려주는 것이 없는 함수는 None이라는 특별한 값을 돌려줍니다. 그래서 a는 None입니다. area는 아무것도 출력하지 않고, 자기를 부른 줄에 12를 돌려줍니다. 이 12는 변수에 넣을 수도, 출력할 수도, 두 배로 만들 수도 있습니다. 출력은 화면을 보는 사람을 위한 것이고, 반환은 프로그램의 나머지 부분을 위해 있습니다. 결과를 나중에 쓰려면 return으로 돌려주세요.

함수는 인자를 받아 본문을 실행하고, return으로 값 하나를 돌려줍니다. area(4, 3)을 쓴 자리는 12로 바뀝니다.

매개변수는 이름, 인자는 값

def area(w, h):에서 w와 h는 매개변수입니다. 함수 안에서만 쓰이는 이름입니다. area(4, 3)의 4와 3은 인자로, 그 한 번의 호출에서 매개변수 자리에 들어가는 값입니다. 순서대로 짝이 지어지므로 첫째 인자가 첫째 매개변수로 갑니다. 인자 개수를 틀리게 부르면 빠진 매개변수 이름을 알려 주는 TypeError가 납니다.

정의할 때 =로 매개변수에 기본값을 줄 수도 있습니다. 부르는 쪽에서 그 인자를 빼면 기본값이 쓰입니다. 파이썬 튜토리얼의 함수 정의 부분에 기본값이 나오고, 내장 함수에도 아주 많습니다. print에도 있는데, end 매개변수의 기본값이 줄 바꿈입니다.

def greet(name, greeting="Hello"):
    return f"{greeting}, {name}!"

print(greet("Mina"))
print(greet("Jun", "Hi"))
print("no new line", end=" ")
print("here")
출력
Hello, Mina!
Hi, Jun!
no new line here

return을 만나면 함수는 바로 끝납니다

함수는 처음 만나는 return에서 바로 끝납니다. 아래에 줄이 더 있어도 실행하지 않습니다. 그래서 특별한 경우를 먼저 return으로 처리해 버리면 코드가 깔끔해집니다. 아래 함수는 if 단원의 입장료 규칙을 함수로 묶었습니다. 이제 프로그램 어디서든 가격을 물어볼 수 있습니다.

def ticket_price(age):
    if age < 7:
        return 0
    if age <= 18:
        return 3000
    return 5000

family = [40, 15, 5]
total = 0
for age in family:
    total += ticket_price(age)
print(total)
출력
8000

함수 안에서 만든 변수는 지역 변수입니다. 함수가 실행되는 동안만 있다가 함수가 끝나면 사라집니다. 함수 안의 total과 함수 밖의 total은 이름만 같을 뿐 서로 관계가 없습니다. 덕분에 프로그램의 다른 부분이 어떤 이름을 쓰는지 신경 쓰지 않고 함수를 가져다 쓸 수 있습니다. 중학교 정보 [9정03-07]이 「프로그램 작성에서 함수를 활용」하라고 하는 까닭도 여기 있습니다. 같은 일을 하는 코드를 한 번만 쓰고 여러 번 부를 수 있습니다.

def함수 정의를 시작함
매개변수정의에 쓴 이름. def area(w, h)의 w
인자호출할 때 넘기는 값. area(4, 3)의 4
return값을 돌려주고 함수를 끝냄
Nonereturn이 없는 함수가 돌려주는 값
지역 변수함수 안에서만 있는 변수
  1. 무엇이 출력될까요?
    def double(x):
        return x * 2
    
    print(double(7))
  2. 무엇이 출력될까요?
    def hello():
        print("hi")
    
    result = hello()
    print(result)
    • hi
      hi
    • hi
      None
    • None
    • hi
  3. 무엇이 출력될까요?
    def add(a, b):
        return a + b
    
    print(add(2, 3) * add(1, 1))
  4. 무엇이 출력될까요?
    def f(x):
        return x + 1
        print("never")
    
    print(f(1))
  5. 무엇이 출력될까요?
    def greet(name, greeting="Hello"):
        return greeting + " " + name
    
    print(greet("Bo"))
  6. 무엇이 출력될까요?
    def sign(n):
        if n > 0:
            return "plus"
        if n < 0:
            return "minus"
        return "zero"
    
    print(sign(-4), sign(0))
  7. 무엇이 출력될까요?
    print("a", end="-")
    print("b")
  8. 무엇이 출력될까요?
    def total_of(nums):
        t = 0
        for n in nums:
            t += n
        return t
    
    print(total_of([4, 5, 6]))
  9. def area(w, h):에서 w와 h를 무엇이라고 부를까요?
    • 인자
    • 매개변수
    • 반환값
    • 예약어
  10. 25가 출력되도록 줄을 순서대로 놓으세요.
    출력
    25
자주 하는 실수
  • 「답을 출력하는 함수는 답을 돌려준 것이다.」 출력은 보여 주기만 합니다. 함수는 여전히 None을 돌려주므로 x = show_area(4, 3) 뒤에 x는 None이고, x * 2는 TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'를 냅니다.
  • 「함수를 정의한 줄보다 위에서 불러도 된다.」 파이썬은 위에서부터 실행하므로 그 순간에는 이름이 아직 없습니다. NameError: name 'area' is not defined가 납니다. def를 첫 호출보다 위에 두세요.
  • 「인자를 빼먹으면 0으로 친다.」 기본값이 없으면 멈춥니다. area(4)는 TypeError: area() missing 1 required positional argument: 'h'를 냅니다.
선생님 메모출력과 반환을 헷갈리는 것이 이 단계에서 가장 흔한 오해이고, 화면에서는 똑같아 보여서 잘 드러나지 않습니다. 결과를 변수에 넣고 그 변수로 한 번 더 계산하게 하면 None이 바로 나타납니다. 말버릇도 도움이 됩니다. 함수가 값을 「돌려준다」, print는 값을 「보여 준다」로 나누어 말하세요. 중학교 정보 [9정03-07]은 함수 활용과 오류 수정을 한 성취기준에 묶어 두었으니, 인자를 빼먹은 오류와 정의보다 먼저 부른 오류를 일부러 내 놓고 고치게 하는 짧은 디버깅 활동을 붙이면 좋습니다.
핵심 정리
  • def 이름(매개변수): 로 함수를 정의하고 본문은 들여 씀.
  • return은 값을 돌려주고 함수를 끝냄.
  • print는 보여 주기만 함. return이 없으면 None.
  • 인자는 순서대로 매개변수에 들어가고, 빠진 것은 기본값으로.
  • 함수 안에서 만든 변수는 지역 변수.
이 과정의 출처 (6)
  • Python Software Foundation, The Python Tutorial for Python 3.12 (docs.python.org/3.12/tutorial: 2 Using the Python Interpreter, 3 An Informal Introduction to Python (numbers, text, lists), 4 More Control Flow Tools (if, for, range, break and continue, defining functions, default argument values, 4.10 coding style: 4-space indentation), 5 Data Structures (list methods, 5.5 dictionaries, insertion order), 8 Errors and Exceptions (syntax errors, exceptions, reading the traceback, handling exceptions), 15 Floating-Point Arithmetic (0.1 + 0.2))
  • Built-in Functions (docs.python.org/3.12/library/functions.html: print, input, len, int, float, str, type, round (round half to even: round(0.5) and round(-0.5) are 0, round(1.5) is 2), range, sum, min, max, sorted)
  • Built-in Types (str methods upper, lower, replace, strip; dict.get; list.append, pop, remove, sort returning None)
  • General Python FAQ (docs.python.org/3.12/faq/general.html: Guido van Rossum began Python in the 1989 Christmas holidays, posted it to USENET in February 1991, named it after Monty Python's Flying Circus)
  • Curriculum for the Korean pages: 교육부 고시 제2022-33호 [별책 10] 정보과 교육과정 (PDF read 2026-10-19: 중학교 정보 [9정03-05] 리스트 등 데이터를 순차적으로 저장하는 구조, [9정03-06] 논리 연산과 중첩 제어 구조, [9정03-07] 함수 활용과 디버거로 오류 수정, [9정03-08] 실생활 문제를 프로그래밍으로 해결, 적용 시 고려 사항 「학생의 수준을 고려하여 적합한 프로그래밍 언어를 선정」; 고등학교 정보 [12정03-04] 자료형, [12정03-05] 표준입출력, [12정03-07] 제어 구조)
  • Bug story only: Smithsonian National Museum of American History, Log Book With Computer Bug, 1947, Harvard Mark II, "first actual case of bug being found", probably not Hopper's log book (americanhistory.si.edu/collections/object/nmah_334663, read 2026-10-19)

확인한 날: 2026-10-19