함수 만들기
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
24show_area는 12를 화면에 출력하고 끝납니다. 아무것도 돌려주지 않는데, 돌려주는 것이 없는 함수는 None이라는 특별한 값을 돌려줍니다. 그래서 a는 None입니다. area는 아무것도 출력하지 않고, 자기를 부른 줄에 12를 돌려줍니다. 이 12는 변수에 넣을 수도, 출력할 수도, 두 배로 만들 수도 있습니다. 출력은 화면을 보는 사람을 위한 것이고, 반환은 프로그램의 나머지 부분을 위해 있습니다. 결과를 나중에 쓰려면 return으로 돌려주세요.
매개변수는 이름, 인자는 값
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 herereturn을 만나면 함수는 바로 끝납니다
함수는 처음 만나는 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 | 값을 돌려주고 함수를 끝냄 |
| None | return이 없는 함수가 돌려주는 값 |
| 지역 변수 | 함수 안에서만 있는 변수 |
- 무엇이 출력될까요?
def double(x): return x * 2 print(double(7)) - 무엇이 출력될까요?
def hello(): print("hi") result = hello() print(result)hi
hihi
NoneNonehi
- 무엇이 출력될까요?
def add(a, b): return a + b print(add(2, 3) * add(1, 1)) - 무엇이 출력될까요?
def f(x): return x + 1 print("never") print(f(1)) - 무엇이 출력될까요?
def greet(name, greeting="Hello"): return greeting + " " + name print(greet("Bo")) - 무엇이 출력될까요?
def sign(n): if n > 0: return "plus" if n < 0: return "minus" return "zero" print(sign(-4), sign(0)) - 무엇이 출력될까요?
print("a", end="-") print("b") - 무엇이 출력될까요?
def total_of(nums): t = 0 for n in nums: t += n return t print(total_of([4, 5, 6])) - def area(w, h):에서 w와 h를 무엇이라고 부를까요?
- 인자
- 매개변수
- 반환값
- 예약어
- 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'를 냅니다.
- 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