기초

파이썬 기초 05강 — 함수: 코드를 재사용하는 단위

🎯 학습 목표

  • def로 함수를 정의하고 호출한다.
  • 매개변수·반환값·기본값·가변인자를 사용한다.
  • 지역 변수와 전역 변수의 범위(스코프)를 구분한다.

📖 함수란?

함수(function)는 “입력을 받아 일을 하고 결과를 돌려주는” 코드 묶음에 이름을 붙인 것입니다. 같은 코드를 반복해 쓰지 않고, 이름으로 불러 재사용합니다. 프로그램을 작은 부품으로 나눠 읽기 쉽고 고치기 쉽게 만듭니다.

💻 함수 정의와 호출

def greet(name):              # name: 매개변수(입력)
    return f"안녕하세요, {name}님!"   # return: 결과 돌려줌

message = greet("철수")        # 호출, "철수"는 인자(argument)
print(message)                # 안녕하세요, 철수님!
# 매개변수 여러 개 + 계산 후 반환
def add(a, b):
    return a + b

print(add(3, 5))    # 8

# return이 없으면 None을 반환 (출력만 하는 함수)
def say_hi():
    print("hi")

💻 기본값 매개변수

def greet(name, greeting="안녕하세요"):
    return f"{greeting}, {name}님!"

print(greet("영희"))                 # 안녕하세요, 영희님!
print(greet("영희", "반갑습니다"))     # 반갑습니다, 영희님!

# 키워드 인자: 순서 대신 이름으로 전달 (가독성↑)
print(greet(name="철수", greeting="환영합니다"))

💻 여러 값 반환 (튜플 활용)

def min_max(numbers):
    return min(numbers), max(numbers)   # 튜플로 묶여 반환

low, high = min_max([3, 1, 9, 4])       # 언패킹
print(low, high)   # 1 9

💻 가변 인자 — 개수가 정해지지 않을 때

def total(*args):          # 인자들이 튜플 args로 묶임
    return sum(args)
print(total(1, 2, 3, 4))   # 10

def profile(**kwargs):     # 키워드 인자들이 딕셔너리로 묶임
    for k, v in kwargs.items():
        print(k, "=", v)
profile(name="철수", age=20)

📖 스코프 — 지역 변수와 전역 변수

x = 10                 # 전역 변수 (함수 밖)

def func():
    y = 5              # 지역 변수 (함수 안에서만 살아 있음)
    print(x)           # 전역 변수는 읽을 수 있음 → 10
    print(y)

func()
# print(y)             # ❌ 에러: y는 함수 안에서만 존재

함수 안에서 만든 변수(지역 변수)는 함수가 끝나면 사라지고, 밖에서는 못 씁니다. 함수는 가급적 필요한 값을 매개변수로 받고 결과를 return으로 돌려주는 방식이 좋습니다(전역 변수에 의존하지 않기).

⚠️ 주의사항

  • 기본값으로 리스트 같은 변경 가능한 객체를 쓰면(def f(items=[])) 호출 간에 값이 공유되는 함정이 있습니다. 기본값은 None으로 두고 함수 안에서 새로 만드세요.
  • 함수 안에서 전역 변수를 바꾸려면 global 선언이 필요하지만, 남용하면 추적이 어렵습니다. 되도록 return으로 값을 주고받으세요.

💡 팁

  • 함수 하나는 “한 가지 일”만 하게 만드세요. 이름만 봐도 무슨 일을 하는지 알 수 있으면 좋은 함수입니다.
  • 함수 첫 줄에 독스트링("""설명""")을 적어두면 나중에 help(함수)로 볼 수 있습니다.