6강

함수(Function) — 코드를 재사용하는 방법

4 조회 1

def 함수 정의, 매개변수, return값, 기본값 인수, *args/**kwargs

이번 강에서 배울 것

  • 함수(Function)의 개념과 필요성
  • def로 함수 정의하고 호출하기
  • 매개변수(Parameter)와 인수(Argument)
  • return 값과 None
  • 기본값 인수, *args, **kwargs
  • 변수 범위(Scope) — 지역 변수 vs 전역 변수

1. 함수란 무엇인가

함수(Function)는 특정 작업을 수행하는 코드 블록으로, 이름을 붙여 재사용할 수 있습니다. 같은 코드를 여러 번 작성하지 않고 함수로 만들어두면 한 번 정의 후 여러 곳에서 호출할 수 있습니다.

# 함수 없이 반복 코드 (나쁜 예)
print("=" * 20)
print("  환영합니다!")
print("=" * 20)
# ... 다른 코드 ...
print("=" * 20)
print("  감사합니다!")
print("=" * 20)

# 함수로 만들면 (좋은 예)
def print_box(message):
    print("=" * 20)
    print(f"  {message}")
    print("=" * 20)

print_box("환영합니다!")
# ... 다른 코드 ...
print_box("감사합니다!")

2. 함수 정의와 호출

# 함수 정의 (define): def 키워드 사용
def say_hello():
    """인사를 출력하는 함수"""  # Docstring: 함수 설명
    print("안녕하세요!")
    print("파이썬을 배우고 있습니다.")

# 함수 호출 (call): 함수명 + ()
say_hello()    # → 안녕하세요! / 파이썬을 배우고 있습니다.
say_hello()    # 여러 번 호출 가능
say_hello()    # 코드 중복 없이 재사용

# 매개변수(parameter) 있는 함수
def greet(name):          # name = 매개변수 (함수 정의 시)
    print(f"안녕하세요, {name}님!")

greet("민준")             # "민준" = 인수 (함수 호출 시)
greet("수진")
greet("철수")
# → 안녕하세요, 민준님!
# → 안녕하세요, 수진님!
# → 안녕하세요, 철수님!

3. return — 결과값 반환

# return: 함수가 계산 결과를 호출한 곳으로 돌려줌
def add(a, b):
    result = a + b
    return result          # 결과 반환

sum_value = add(3, 5)      # 반환값을 변수에 저장
print(sum_value)           # → 8
print(add(10, 20))         # → 30
print(add(7, 3) * 2)       # → 20 (반환값으로 바로 계산 가능)

# return이 없으면 None 반환
def no_return():
    print("나는 아무것도 반환하지 않아요")

result = no_return()
print(result)              # → None

# 여러 값 반환 (튜플로 묶여 반환)
def divide(a, b):
    quotient  = a // b     # 몫
    remainder = a % b      # 나머지
    return quotient, remainder

q, r = divide(17, 5)
print(f"몫: {q}, 나머지: {r}")  # → 몫: 3, 나머지: 2

# return은 함수를 즉시 종료시킴
def check_positive(n):
    if n <= 0:
        return "양수가 아닙니다"  # 여기서 함수 종료
    return f"{n}은 양수입니다"   # n > 0일 때만 실행

print(check_positive(-5))  # → 양수가 아닙니다
print(check_positive(10))  # → 10은 양수입니다

4. 기본값 인수(Default Parameter)

# 매개변수에 기본값을 지정하면 인수 생략 가능
def greet(name, language="한국어"):
    if language == "한국어":
        print(f"안녕하세요, {name}님!")
    elif language == "영어":
        print(f"Hello, {name}!")
    elif language == "일본어":
        print(f"こんにちは、{name}さん!")

greet("민준")              # 기본값 사용 → 안녕하세요, 민준님!
greet("James", "영어")    # 기본값 덮어씀 → Hello, James!
greet("佐藤", "일본어")   # → こんにちは、佐藤さん!

# 기본값 인수는 반드시 일반 인수 뒤에 배치
# ❌ def func(a=1, b): pass   # SyntaxError
# ✅ def func(a, b=1): pass   # 올바름

# 키워드 인수로 순서 무관하게 전달
def create_profile(name, age, city):
    print(f"{name} / {age}세 / {city}")

create_profile(age=28, city="서울", name="김민준")
# → 김민준 / 28세 / 서울

5. *args와 **kwargs

# *args: 개수 불명의 위치 인수를 튜플로 받음
def sum_all(*args):
    total = 0
    for num in args:
        total += num
    return total

print(sum_all(1, 2))              # → 3
print(sum_all(1, 2, 3, 4, 5))    # → 15
print(sum_all(10, 20, 30, 40))   # → 100

# **kwargs: 개수 불명의 키워드 인수를 딕셔너리로 받음
def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"  {key}: {value}")

print_info(name="김민준", age=28, city="서울")
# → name: 김민준
# → age: 28
# → city: 서울

# 혼합 사용
def mixed(a, b, *args, **kwargs):
    print(f"a={a}, b={b}")
    print(f"args={args}")
    print(f"kwargs={kwargs}")

mixed(1, 2, 3, 4, x=10, y=20)
# → a=1, b=2
# → args=(3, 4)
# → kwargs={'x': 10, 'y': 20}

6. 변수 범위(Scope)

# 지역 변수 (Local): 함수 안에서 만든 변수 → 함수 밖에서 접근 불가
def my_func():
    local_var = "나는 지역 변수"
    print(local_var)

my_func()
# print(local_var)  # NameError: 함수 밖에서 접근 불가!

# 전역 변수 (Global): 함수 밖에서 만든 변수 → 어디서든 읽기 가능
global_var = "나는 전역 변수"

def read_global():
    print(global_var)  # 전역 변수 읽기 가능

read_global()  # → 나는 전역 변수

# 함수 안에서 전역 변수 수정: global 키워드 필요
count = 0

def increment():
    global count        # global 선언 필요
    count += 1

increment()
increment()
print(count)  # → 2

# 권장: global 사용을 최소화하고 return으로 값을 주고받을 것

6강 핵심 요약

  • def로 함수 정의, 함수명()으로 호출
  • return: 결과를 반환, return 없으면 None 반환
  • 여러 값 반환 가능 — 튜플로 묶여 반환됨
  • 기본값 인수: 인수 생략 시 기본값 사용 (일반 인수 뒤에 배치)
  • *args: 가변 위치 인수(튜플), **kwargs: 가변 키워드 인수(딕셔너리)
  • 지역 변수는 함수 내부에서만 유효, 전역 변수 수정 시 global 선언
  • 다음 강: 리스트와 튜플 — 파이썬의 핵심 자료구조

관련 검색어  ·  파이썬함수, def파이썬, return파이썬, 기본값인수, args kwargs, 파이썬스코프, 지역변수전역변수

댓글 0

채용정보
공지사항
인사이트
MY