- 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. 상태를 유지하는 콜백 함수, 데코레이터 구현, 이벤트 핸들러 정의 등에서 유용하게 활용됩니다.