Published on

4단계: 함수와 스코프

4-1. 함수 정의와 호출

def greet():
    print("안녕하세요!")

greet()

4-2. 매개변수와 인자

def welcome(name):
    print(f"{name}님 환영합니다.")

welcome("철수")

4-3. return 문

def add(x, y):
    return x + y

result = add(3, 4)
print(result)  # 7

4-4. 기본값 인자

def repeat(message, times=2):
    print(message * times)

repeat("Hi")
repeat("Hi", 3)

4-5. 가변 인자 (*args, **kwargs)

def show_all(*args):
    for arg in args:
        print(arg)

def show_key_values(**kwargs):
    for k, v in kwargs.items():
        print(f"{k} = {v}")

4-6. 변수의 스코프 (유효 범위)

  • 함수 내부 변수는 지역(local)
  • 함수 외부 변수는 전역(global)
x = 10

def func():
    x = 5  # 지역 변수
    print(x)

func()   # 5
print(x) # 10

4-7. global과 nonlocal 키워드

x = 1

def outer():
    x = 2
    def inner():
        nonlocal x
        x = 3
    inner()
    print(x)

outer()  # 3

4-8. 클로저 (closure)

def outer(msg):
    def inner():
        print(msg)
    return inner

greet = outer("안녕")
greet()  # 안녕

요약

  • 함수는 코드의 재사용성과 구조화를 위해 필수
  • 인자, 반환값, 기본값, 가변 인자를 유연하게 조합 가능
  • 변수 스코프를 구분하고 필요한 경우 global, nonlocal을 사용할 수 있음
  • 클로저는 함수 내부에 함수가 정의되어 외부 변수에 접근하는 구조

심화학습

Q1. 기본값 인자를 리스트나 딕셔너리로 설정하면 안 되는 이유는?
A1. 기본값은 함수 정의 시 한 번만 계산되기 때문에, 변경 가능한 객체를 공유하게 되어 예기치 못한 결과가 발생할 수 있습니다.


Q2. 함수에서 return을 생략하면 어떤 값이 반환되나요?
A2. Python에서는 None이 자동 반환됩니다.


Q3. 클로저는 어떤 상황에서 유용하게 쓰일 수 있나요?
A3. 상태를 유지하는 콜백 함수, 데코레이터 구현, 이벤트 핸들러 정의 등에서 유용하게 활용됩니다.