C
Python/입문/Lesson 06

함수 (Function)

1시간·theory
이 챕터
5/7
Python

함수 (Function)

🎯 이 lesson 을 읽고 나면

이 lesson 을 다 읽고 나면 아래 3가지를 자신 있게 할 수 있습니다.

  • args · *kwargs + 기본값 함정 (mutable default)
  • ✅ type hint + docstring 작성
  • ✅ first-class function + 클로저

학습 목표를 체크리스트로 두고 다 답할 수 있게 되면 lesson 을 닫으세요.

함수 8가지 패턴 — 코드 + 실행 결과

함수 = 이름 붙은 코드 블록. 같은 일을 여러 번 쓸 때 재사용 가능.


1. 가장 단순한 함수

python
def 인사():
    print("안녕!")

인사()        # 안녕!
인사()        # 안녕!  (또 호출 가능)

def (define) → 함수 이름 → ( ): → 들여쓰기 블록.


2. 매개변수 받기

python
def 인사(이름):
    print(f"안녕 {이름}!")

인사("홍길동")              # 안녕 홍길동!
인사("이몽룡")              # 안녕 이몽룡!

이름 = 매개변수 (받을 자리). "홍길동" = 인자 (실제 값).


3. return — 결과 돌려주기

python
def 더하기(a, b):
    return a + b

결과 = 더하기(3, 5)
print(결과)                  # 8
print(더하기(10, 20))        # 30

print vs return:

  • print = 화면에 보여만 줌. 변수에 못 담음
  • return = 호출한 곳으로 값을 보냄. 변수에 담거나 다른 함수에 넘김

4. 기본값 (default)

python
def 인사(이름, 인사말="안녕"):
    print(f"{인사말} {이름}!")

인사("홍길동")                       # 안녕 홍길동!
인사("이몽룡", "반갑")               # 반갑 이몽룡!
인사("성춘향", 인사말="환영")        # 환영 성춘향!

기본값은 항상 뒤. def f(a=1, b) ❌ → SyntaxError.


5. 여러 인자 (*args)

python
def 합계(*숫자들):
    총합 = 0
    for n in 숫자들:
        총합 += n
    return 총합

print(합계(1, 2, 3))           # 6
print(합계(10, 20, 30, 40))    # 100
print(합계())                  # 0

6. 여러 값 반환

python
def 나누기와_나머지(a, b):
    몫 = a // b
    나머지 = a % b
    return 몫, 나머지            # 튜플 반환

q, r = 나누기와_나머지(17, 5)
print(f"몫={q}, 나머지={r}")    # 몫=3, 나머지=2

7. 문서화 (docstring)

python
def 원_넓이(반지름):
    """원의 넓이를 계산한다.

    Args:
        반지름: 양수
    Returns:
        넓이 (float)
    """
    return 3.14159 * 반지름 ** 2

print(원_넓이(5))               # 78.53975
print(원_넓이.__doc__)          # 위 docstring 출력

8. 지역 변수 vs 전역 변수

python
점수 = 100              # 함수 밖 (전역)

def 보너스():
    점수 = 50           # 함수 안 — 다른 점수!
    print("안:", 점수)

보너스()                # 안: 50
print("밖:", 점수)      # 밖: 100  ← 안 변함!

함수 안 변수는 그 함수에서만 살아있고 끝나면 사라짐.


한 줄 요약

패턴문법
정의def 이름(매개변수): ...
호출이름(값)
결과 반환return 값
기본값def f(x=10):
여러 인자def f(*args):
여러 반환return a, b
💻 greet, add, is_even, 기본 매개변수
# ===== 함수 정의 =====

# 인사 함수 — 입력: 이름, 출력: 인사 문자열
def greet(name):
    return f"안녕하세요, {name}님!"

# 덧셈 함수 — 입력: 두 숫자, 출력: 합계
def add(a, b):
    return a + b

# 짝수 판별 함수 — 입력: 정수, 출력: True/False
def is_even(n):
    return n % 2 == 0   # 나머지가 0이면 짝수

# 기본 매개변수 — 인자 없이 호출하면 기본값 사용
def introduce(name, age=25, city="서울"):
    return f"저는 {city} 사는 {age}세 {name}입니다."

# ===== 호출 및 출력 =====
print(greet("홍길동"))            # 안녕하세요, 홍길동님!
print(add(10, 20))                # 30
print(is_even(7))                 # False
print(is_even(8))                 # True

# 기본값 활용
print(introduce("김철수"))        # 저는 서울 사는 25세 김철수입니다.
print(introduce("이영희", 30, "부산"))  # 저는 부산 사는 30세 이영희입니다.

# return 없는 함수 → None 반환
def say_hello():
    print("Hello!")               # 출력은 하지만

result = say_hello()
print(f"반환값: {result}")        # 반환값: None

💡 핵심 포인트

1. 기본값 매개변수는 뒤쪽에 배치
2. *args: 가변 위치 인자 (튜플)
3. **kwargs: 가변 키워드 인자 (딕셔너리)

Python 파일 I/O는 open() 함수로 파일을 엽니다. with open(path, mode) as f: 패턴으로 자동 닫기를 보장합니다. 모드: r(읽기), w(쓰기), a(추가), b(바이너리). json.load/dump로 JSON, csv.reader/writer로 CSV를 처리합니다. pathlib.Path는 파일 경로를 객체지향적으로 다룹니다.

🐍 실행해보기 — 함수 (Function)

위 개념을 실제로 코드로 실행해보세요. 값을 바꿔가며 어떻게 동작하는지 직접 확인하는 게 가장 빠른 학습.
✏️ Python 코드
📟 콘솔 출력
▶ 실행 버튼을 눌러보세요
🐍 Pyodide로 실제 Python 실행 — 첫 실행 시 로딩 3~5초 소요

🤖 AI 에게 이렇게 요청해보세요

이 lesson 의 개념을 알면 AI 에게 구체적으로 지시할 수 있습니다. 막연한 "고쳐줘" 가 아니라 어휘를 가진 요청 — 그게 토큰 절약의 출발점입니다.

  • "이 함수에 타입 힌트 + docstring 추가해줘"
  • "이 함수의 부수효과 (전역 변수 변경) 제거해서 순수 함수로 바꿔줘"

왜 이게 토큰을 줄이나

개념을 모를 땐 AI 답변을 받고도 "그게 뭐예요?" 를 다시 물어야 합니다. 그 "다시 물음" 이 토큰을 잡아먹습니다. 개념 한 번 익혀두면 대화가 한 번에 끝납니다.

함수 정의 - Python