선택 매개변수의 안전한 기본값을 설계합니다.
기본값은 함수가 정의될 때 한 번 평가됩니다. 숫자, 문자열, None 같은 변경 불가능 값은 안전하지만 리스트와 딕셔너리를 기본값으로 두면 여러 호출이 같은 객체를 공유합니다.
예제에서 def add(item, items=None): 부분부터 찾으세요. 값을 만드는 표현식과 그 값을 다음 문장으로 넘기는 흐름을 한 줄씩 따라가면 실행 결과를 스스로 설명할 수 있습니다.
None을 기본값으로 받고 함수 안에서 새 리스트를 만들면 호출마다 독립적인 객체를 얻습니다. None 자체가 유효한 입력이라면 별도 sentinel 객체를 사용합니다.
기본값은 대부분의 호출에 자연스러운 동작이어야 하며 숨겨진 시간, 환경, 전역 상태에 의존하지 않게 합니다.
이 코드는 브라우저의 실제 Python에서 실행됩니다. 먼저 현재 결과를 확인한 뒤 options 딕셔너리를 선택적으로 받아 복사한 뒤 수정하는 함수를 만들어보세요.
def add(item, items=[])는 이전 호출의 항목이 다음 호출에 남는 대표적인 버그입니다.
직접 바꿔보세요options 딕셔너리를 선택적으로 받아 복사한 뒤 수정하는 함수를 만들어보세요.
실행 버튼을 누르면 결과가 여기에 표시됩니다.