[파이썬] 함수의 기본 인자 설정 스타일

함수를 정의할 때, 기본 인자 값을 설정하는 것은 매우 유용합니다. 이를 통해 함수를 호출할 때 인자 값이 주어지지 않을 경우, 기본값이 사용되도록 할 수 있습니다. Python에서는 함수의 기본 인자를 설정하는 여러 가지 스타일이 있습니다.

기본 인자 설정

Python에서 함수를 정의할 때, 인자에 기본 값을 할당하여 기본 인자를 설정할 수 있습니다. 이렇게 설정된 기본값은 함수를 호출할 때 해당 인자에 값이 주어지지 않는 경우에 사용됩니다.

def greet(name='Anonymous'):
    print(f"Hello, {name}!")

greet()
greet('John')

출력:

Hello, Anonymous!
Hello, John!

위의 예시에서 greet 함수는 name이라는 인자를 가지고 있으며, 기본값으로 'Anonymous'을 설정했습니다. 함수를 호출할 때 name 인자에 값이 주어지지 않으면 기본값인 'Anonymous'가 사용됩니다.

C 스타일 인자 할당

파이썬에서는 C 프로그래밍 언어의 스타일처럼 인자에 직접 값을 할당하는 방식으로도 기본 인자를 설정할 수 있습니다. 이 방식은 인자의 순서를 변경하지 않고도 기본값을 지정할 수 있는 장점이 있습니다.

def power(base, exponent=2):
    return base ** exponent

print(power(3))
print(power(2, 3))

출력:

9
8

위의 예시에서 power 함수는 baseexponent라는 두 개의 인자를 가지고 있습니다. exponent 인자는 기본값으로 2를 설정하였습니다. 함수를 호출할 때 exponent 인자를 지정하지 않으면 기본값인 2가 사용되며, 지정할 경우 사용자가 지정한 값이 사용됩니다.

주의사항

함수 정의 시 기본 인자로 가변 객체(mutable object)를 사용하는 경우 주의가 필요합니다. 이는 함수를 여러 번 호출할 때 기본 인자 객체가 같은 객체에 공유되기 때문입니다.

예를 들어, 아래의 코드에서 기본 인자로 빈 리스트를 사용하였습니다.

def append_to_list(item, my_list=[]):
    my_list.append(item)
    return my_list

print(append_to_list(1))
print(append_to_list(2))

출력:

[1]
[1, 2]

예상한 대로 결과가 나오지 않았습니다. append_to_list 함수를 첫 번째 호출할 때 my_list[1]이 추가되었습니다. 그 후에 두 번째 호출할 때 my_list[2]가 추가되었습니다. 올바른 결과를 얻고자 한다면, 가변 객체가 아닌 불변 객체(immutable object)를 기본 인자로 설정해야 합니다.

def append_to_list(item, my_list=None):
    if my_list is None:
        my_list = []
    my_list.append(item)
    return my_list

print(append_to_list(1))
print(append_to_list(2))

출력:

[1]
[2]

위의 예시처럼, None을 기본값으로 설정하고 함수 내부에서 새로운 빈 리스트를 생성하여 사용하면 원하는 결과를 얻을 수 있습니다.

결론

Python에서 함수의 기본 인자를 설정하는 방법을 알아보았습니다. 기본 인자 설정을 통해 함수 호출 시 특정 인자에 값을 지정하지 않더라도 기본값을 사용할 수 있습니다. 주의사항으로는 가변 객체를 기본 인자로 설정할 때 객체가 공유되는 점을 유의해야 합니다.