기본값(default value)는 함수에서 인자를 전달하지 않았을 때 자동으로 사용되는 값을 말한다. 파이썬에서 함수 정의 시 인자의 기본값을 설정하면, 함수를 호출할 때 해당 인자를 생략해도 기본값이 사용된다.
함수를 정의할 때 기본값을 설정하려면 인자 뒤에 등호(=
)를 사용하여 값을 할당하면 된다.
def 함수이름(인자1=기본값1, 인자2=기본값2):
함수내용
SyntaxError
가 발생.# 기본값을 가진 함수
def greet(name, greeting="Hello"):
print(f"{greeting}, {name}!")
# 인자를 모두 제공
greet("Alice", "Hi") # 출력: Hi, Alice!
# 기본값 사용 (greeting 인자 생략)
greet("Bob") # 출력: Hello, Bob!
# 기본값이 없는 인자(name)가 뒤에 오면 오류 발생
def greet(greeting="Hello", name):
print(f"{greeting}, {name}!")
# 두 번째 인자 b에 기본값 5를 설정
def add(a, b=5):
return a + b
# 인자를 모두 제공
print(add(3, 4)) # 출력: 7
# 두 번째 인자 생략 (기본값 5 사용)
print(add(3)) # 출력: 8
def describe_person(name, age=20, city="Unknown"):
print(f"Name: {name}, Age: {age}, City: {city}")
# 모든 인자를 제공
describe_person("Alice", 25, "New York")
# 출력: Name: Alice, Age: 25, City: New York
# 일부 인자 생략 (기본값 사용)
describe_person("Bob")
# 출력: Name: Bob, Age: 20, City: Unknown
# 하나의 인자만 생략
describe_person("Charlie", 30)
# 출력: Name: Charlie, Age: 30, City: Unknown
기본값으로 리스트나 딕셔너리 같은 가변 객체를 사용할 때는 주의가 필요하다. 함수가 호출될 때마다 같은 객체가 공유되기 때문에, 의도하지 않은 동작이 발생할 수 있다.
def append_element(value, my_list=[]):
my_list.append(value)
return my_list
# 함수 호출 (기본값으로 빈 리스트가 사용됨)
print(append_element(1)) # 출력: [1]
print(append_element(2)) # 출력: [1, 2] (기존 리스트가 계속 유지됨)
# 해결 방법: None을 기본값으로 설정하고 내부에서 리스트를 생성
def append_element_safe(value, my_list=None):
if my_list is None:
my_list = []
my_list.append(value)
return my_list
# 함수 호출 (새로운 리스트가 매번 생성됨)
print(append_element_safe(1)) # 출력: [1]
print(append_element_safe(2)) # 출력: [2]
None
을 사용하여 함수 내부에서 새로운 객체를 생성하는 방식이 안전함.