파이썬 함수에서는 매개변수에 기본값을 지정할 수 있다. 기본 매개변수는 함수 호출 시 해당 매개변수에 인수를 제공하지 않을 때 기본값이 사용되도록 하는 기능을 제공한다. 이를 통해 함수 호출을 유연하게 할 수 있으며, 함수의 매개변수를 더 간결하게 관리할 수 있다.
1. 기본 매개변수 정의
기본 매개변수는 함수 정의 시 매개변수에 기본값을 할당하여 정의된다. 함수가 호출될 때 인수가 제공되지 않으면 이 기본값이 사용된다.
def 함수이름(매개변수1=기본값1, 매개변수2=기본값2, ...):
함수 본문
예제)
def greet(name, msg="Hello"):
print(f"{msg}, {name}!")
greet("Alice") # 출력: Hello, Alice!
greet("Bob", "Hi") # 출력: Hi, Bob!
이 예제에서 msg 매개변수의 기본값은 "Hello"이다. greet 함수가 호출될 때 msg 인수를 제공하지 않으면 기본값 "Hello"가 사용된다.
2. 여러 기본 매개변수
여러 기본 매개변수를 사용할 수 있다. 이 경우 기본값이 없는 매개변수는 기본값이 있는 매개변수보다 앞에 위치해야 한다.
예제)
def make_sentence(subject, verb="is", object="awesome"):
return f"{subject} {verb} {object}"
print(make_sentence("Python")) # 출력: Python is awesome
print(make_sentence("Python", "is", "great")) # 출력: Python is great
print(make_sentence("She", "looks")) # 출력: She looks awesome
이 예제에서 verb와 object 매개변수에 기본값이 지정되어 있다. make_sentence 함수가 호출될 때 해당 인수가 제공되지 않으면 기본값이 사용된다.
3. 기본 매개변수와 키워드 인수
기본 매개변수는 함수 호출 시 키워드 인수와 함께 사용할 수 있다. 이를 통해 함수 호출 시 인수의 순서를 지키지 않고도 값을 전달할 수 있다.
예제)
def greet(name, msg="Hello"):
print(f"{msg}, {name}!")
greet(name="Alice") # 출력: Hello, Alice!
greet(msg="Hi", name="Bob") # 출력: Hi, Bob!
이 예제에서 greet 함수는 키워드 인수를 사용하여 호출된다. 키워드 인수를 사용하면 매개변수의 순서에 관계없이 값을 전달할 수 있다.
4. 기본값이 있는 가변 인수
기본 매개변수를 가변 인수와 함께 사용할 수 있다. 가변 인수는 함수가 정해지지 않은 수의 인수를 받을 수 있도록 한다.
예제)
def add(a, b=0, *args):
result = a + b
for num in args:
result += num
return result
print(add(1)) # 출력: 1
print(add(1, 2)) # 출력: 3
print(add(1, 2, 3, 4, 5)) # 출력: 15
이 예제에서 add 함수는 두 개의 위치 인수 a와 b를 받고, b는 기본값을 갖는다. 추가로 가변 인수 *args를 통해 여러 개의 인수를 받을 수 있다.
5. 기본값으로 사용되는 가변 객체
기본 매개변수의 값으로 가변 객체(리스트, 딕셔너리 등)를 사용할 때는 주의가 필요하다. 기본값으로 사용된 가변 객체는 함수가 호출될 때마다 공유된다.
def append_to_list(value, my_list=[]):
my_list.append(value)
return my_list
print(append_to_list(1)) # 출력: [1]
print(append_to_list(2)) # 출력: [1, 2]
print(append_to_list(3)) # 출력: [1, 2, 3]
이 예제에서 my_list는 기본값으로 빈 리스트를 가지며, 함수가 호출될 때마다 동일한 리스트 객체가 공유된다.
이를 해결하려면 기본값으로 None을 사용하고, 함수 내부에서 새로운 리스트를 생성하는 방식으로 변경하면 된다.
def append_to_list(value, my_list=None):
if my_list is None:
my_list = []
my_list.append(value)
return my_list
print(append_to_list(1)) # 출력: [1]
print(append_to_list(2)) # 출력: [2]
print(append_to_list(3)) # 출력: [3]