Python 함수 정의에서 기본 인수를 설정하면 함수 호출 중에 인수가 생략된 경우 기본값이 사용됩니다.
다음 세부 사항은 아래에 설명되어 있습니다.
- 기본 인수 설정
- 기본 인수의 위치에 대한 제약 조건
- 목록이나 사전을 기본값으로 사용하는 경우
기본 인수 설정
함수 정의에서 인수 이름 = 기본값인 경우 해당 인수가 생략되면 기본값이 사용됩니다.
def func_default(arg1, arg2='default_x', arg3='default_y'): print(arg1) print(arg2) print(arg3) func_default('a') # a # default_x # default_y func_default('a', 'b') # a # b # default_y func_default('a', arg3='c') # a # default_x # c
기본 인수의 위치에 대한 제약 조건
함수를 정의할 때 기본 인수를 일반 인수(기본값이 지정되지 않은 인수) 앞에 배치하면 오류가 발생합니다.SyntaxError
# def func_default_error(arg2='default_a', arg3='default_b', arg1): # print(arg1) # print(arg2) # SyntaxError: non-default argument follows default argument
목록이나 사전을 기본값으로 사용하는 경우
목록이나 사전과 같은 업데이트 가능한(변경 가능한) 객체가 기본값으로 지정되면 해당 객체는 함수가 정의될 때 생성됩니다. 그런 다음 해당 인수 없이 함수를 호출하면 동일한 개체가 사용됩니다.
기본 인수 값은 함수 정의가 실행될 때 왼쪽에서 오른쪽으로 평가됩니다. 즉, 기본 인수 표현식은 함수가 정의될 때 한 번만 평가되고 동일한 “계산된” 값이 각 호출에 사용됩니다.
8.7. Function definitions — Python 3.10.2 Documentation
따라서 예를 들어 목록이나 사전을 기본 인수로 사용하여 요소를 추가하고 해당 인수 없이 여러 번 호출되는 함수가 정의된 경우 요소가 동일한 개체에 반복적으로 추가됩니다.
목록의 예.
def func_default_list(l=[0, 1, 2], v=3): l.append(v) print(l) func_default_list([0, 0, 0], 100) # [0, 0, 0, 100] func_default_list() # [0, 1, 2, 3] func_default_list() # [0, 1, 2, 3, 3] func_default_list() # [0, 1, 2, 3, 3, 3]
사전의 예.
def func_default_dict(d={'default': 0}, k='new', v=100): d[k] = v print(d) func_default_dict() # {'default': 0, 'new': 100} func_default_dict(k='new2', v=200) # {'default': 0, 'new': 100, 'new2': 200}
함수가 호출될 때마다 새 객체가 생성됩니다.
def func_default_list_none(l=None, v=3): if l is None: l = [0, 1, 2] l.append(v) print(l) func_default_list_none() # [0, 1, 2, 3] func_default_list_none() # [0, 1, 2, 3]