Python의 기본 매개변수 값 처리는 대부분의 새로운 Python 프로그래머를 귀찮게 할 수 있는 몇 가지 사항 중 하나입니다.
문제의 원인은 "변경 가능한" 개체를 기본값으로 사용하는 것입니다. 즉, 목록이나 사전과 같이 제자리에서 수정할 수 있는 값입니다.
두 번째 인수가 제공되지 않으면 함수가 호출될 때마다 새 목록이 생성되므로 EXPECTED OUTPUT은 다음과 같습니다.
[12] [43]
함수가 정의될 때 새로운 목록이 한 번 생성되며, 각 연속 호출에서 동일한 목록이 사용됩니다.
Python의 기본 인수는 함수가 호출될 때마다가 아니라 함수가 정의될 때 한 번 평가됩니다. 즉, 변경 가능한 기본 인수를 사용하고 변경하면 이후에 함수를 호출할 때에도 해당 개체를 변경하게 됩니다.
우리가 해야 할 일
함수가 호출될 때마다 기본 arg를 사용하여 인수가 제공되지 않았다는 신호를 사용하여 새 개체를 만듭니다(없음이 좋은 선택인 경우가 많음).
예시
def func(data=[]): data.append(1) return data func() func() def append2(element, foo=None): if foo is None: foo = [] foo.append(element) return foo print(append2(12)) print(append2(43))
출력
[12] [43]