[파이썬 개념 8] 함수

2026-11-09 21:38 ·수정 2026-11-10 11:44

print(), len(), int() 처럼 지금까지 써 온 것들은 모두 함수입니다. 이 글에서는 함수를 직접 만드는 방법을 알아봅니다.
함수를 만들 줄 알면 긴 프로그램을 작은 조각으로 나누어 생각할 수 있습니다.

1. 함수가 필요한 이유

  • 반복을 줄인다: 같은 코드를 여러 번 쓰지 않고 이름만 부른다.
  • 고치기 쉽다: 규칙이 바뀌면 함수 한 곳만 고친다.
  • 나누어 생각한다: 큰 문제를 "판정하는 함수", "세는 함수" 처럼 작은 일로 나눈다.

2. 함수 만들고 부르기

def greet():
    print("안녕하세요")
    print("푸름OJ입니다")

greet()
greet()

실행 결과

안녕하세요
푸름OJ입니다
안녕하세요
푸름OJ입니다
  • def 함수이름(): 으로 만들고, 할 일을 들여쓰기해서 씁니다.
  • def 는 함수를 만들기만 합니다. greet() 처럼 불러야 실행됩니다.
  • 함수는 만든 다음에 불러야 합니다.
hello()

def hello():
    print("hi")

실행 결과

NameError: name 'hello' is not defined. Did you mean: 'help'?

3. 매개변수와 인자

괄호 안에 이름을 쓰면, 함수를 부를 때 넘겨준 값이 그 이름에 담깁니다.
함수를 만들 때 쓴 이름을 매개변수, 부를 때 넘기는 값을 인자라고 합니다.

def greet(name):            # name: 매개변수
    print(f"{name}님, 안녕하세요")

greet("푸름")               # "푸름": 인자
greet("소담")

실행 결과

푸름님, 안녕하세요
소담님, 안녕하세요

여러 개를 받을 때는 쉼표로 나눕니다. 넘기는 순서대로 담깁니다.

def show(name, score):
    print(f"{name}: {score}점")

show("보람", 92)
show(85, "새롬")

실행 결과

보람: 92점
85: 새롬점

두 번째 줄은 순서를 바꾸어 넘겨서 엉뚱하게 출력되었습니다. 헷갈리면 이름을 붙여 넘길 수 있습니다.

def show(name, score):
    print(f"{name}: {score}점")

show(score=85, name="새롬")

실행 결과

새롬: 85점

기본값

매개변수에 기본값을 주면, 부를 때 생략할 수 있습니다.

def greet(name, msg="안녕하세요"):
    print(f"{name}님, {msg}")

greet("푸름")
greet("푸름", "반갑습니다")

실행 결과

푸름님, 안녕하세요
푸름님, 반갑습니다

4. return: 결과 돌려주기

return 은 함수의 결과를 부른 곳으로 돌려줍니다. 돌려받은 값은 변수에 담거나, 출력하거나, 다른 계산에 쓸 수 있습니다.

def average(a, b, c):
    return (a + b + c) / 3

avg = average(80, 90, 100)
print(avg)
print(f"{average(70, 75, 81):.1f}")
print(average(80, 90, 100) >= 60)

실행 결과

90.0
75.3
True

print 와 return 의 차이

def add_print(a, b):
    print(a + b)

def add_return(a, b):
    return a + b

x = add_print(3, 4)
y = add_return(3, 4)
print("x:", x, "y:", y)

실행 결과

7
x: None y: 7
print return
하는 일 화면에 보여 준다 부른 곳에 값을 돌려준다
결과를 변수에 담으면 None (값 없음) 그 값

결과를 다른 계산에 이어서 써야 하면 return 입니다. 함수 안에서는 계산만 하고 돌려주고, 출력은 밖에서 하는 습관이 좋습니다.

return 을 만나면 함수가 끝난다

def grade(score):
    if score >= 90:
        return "A"
    if score >= 80:
        return "B"
    return "C"

print(grade(95), grade(85), grade(50))

실행 결과

A B C

return "A" 를 실행하면 그 자리에서 함수가 끝나므로 아래 if 는 검사하지 않습니다. 그래서 elif 를 쓰지 않아도 됩니다.

여러 값 돌려주기

쉼표로 나누어 돌려주면 받을 때도 여러 변수로 나누어 받습니다.

def min_max(nums):
    return min(nums), max(nums)

lo, hi = min_max([7, 2, 9, 4])
print(lo, hi)

실행 결과

2 9

5. 지역 변수와 전역 변수

함수 안에서 만든 변수(지역 변수)는 함수 안에서만 쓸 수 있습니다.

def make():
    secret = 42
    return secret

print(make())
print(secret)

실행 결과

NameError: name 'secret' is not defined

함수 밖에서 만든 변수(전역 변수)는 함수 안에서 읽을 수는 있지만, 그 값에 의존하면 함수를 이해하기 어려워집니다.
필요한 값은 매개변수로 받고, 결과는 return 으로 돌려주는 것이 원칙입니다.

count = 0

def add_one(c):
    return c + 1

count = add_one(count)
count = add_one(count)
print(count)

실행 결과

2

6. 함수로 나누어 문제 풀기

"리스트에서 소수가 몇 개인지 세기" 를 두 함수로 나누어 봅시다.

def is_prime(n):
    if n < 2:
        return False
    for d in range(2, n):
        if n % d == 0:
            return False
    return True

def count_primes(nums):
    count = 0
    for n in nums:
        if is_prime(n):
            count += 1
    return count

print(is_prime(7), is_prime(9), is_prime(1))
print(count_primes([2, 3, 4, 5, 9, 11, 1]))

실행 결과

True False False
4
  • is_prime 은 한 수가 소수인지만 판단합니다.
  • count_primes 는 개수 세는 일만 하고, 판단은 is_prime 에게 맡깁니다.

함수 하나가 한 가지 일만 하도록 나누면, 각각을 따로 시험해 볼 수 있어서 틀린 곳을 찾기 쉽습니다.

7. 함수 설계 순서

  1. 함수가 무엇을 받아서(매개변수) 무엇을 돌려줄지(return) 먼저 정한다.
  2. 이름을 하는 일이 드러나게 짓는다. is_even, average, grade
  3. 안쪽 코드를 쓴다.
  4. 여러 값을 넣어 불러 보며 확인한다. 경계값도 넣는다.

8. 자주 쓰는 내장 함수

함수 하는 일
print(), input() 출력, 입력
int(), float(), str() 자료형 바꾸기
len() 개수, 글자 수
sum(), max(), min() 합계, 최댓값, 최솟값
abs() 절댓값
round(값, 자릿수) 반올림
range() 수의 범위
sorted() 정렬한 새 리스트
type() 자료형 확인
print(abs(-7), round(3.14159, 2), max(3, 9, 4))

실행 결과

7 3.14 9

정리

내용 모양
만들기 def 이름(매개변수):
부르기 이름(인자)
돌려주기 return 값
기본값 def f(a, b=10):
여러 값 return a, b / x, y = f()
  • 만들기만 하면 실행되지 않는다. 불러야 실행된다.
  • print 는 보여 주기, return 은 돌려주기. 계산 결과는 return.
  • 함수 안의 변수는 함수 안에서만 쓸 수 있다. 값은 매개변수로 받고 return 으로 돌려준다.
  • 함수 하나는 한 가지 일만.

확인 문제

  1. 다음 코드의 출력은?
    def f(x):
     return x * 2
    print(f(f(3)))
  2. 짝수이면 True, 홀수이면 False 를 돌려주는 함수 is_even(n) 을 쓰세요.
  3. 함수 안에서 print 만 하고 return 을 쓰지 않으면, 그 함수의 결과를 변수에 담았을 때 무엇이 담기나요?

연습해 보기

앞에서 푼 문제를 함수로 다시 짜 봅시다.

확인 문제 정답

  1. 12 : 안쪽 f(3) 이 6이 되고, 다시 f(6) 이 12가 됩니다.
  2. 예시
    def is_even(n):
     return n % 2 == 0
  3. None (값 없음)

댓글 0

로그인하면 댓글을 쓸 수 있습니다.