Effective Python BETTER WAY 24
함수의 디폴트 인자에 정적이지 않은, 동적인 값을 사용하고 싶다면 일반적인 관례는 디폴트 값을 None
으로 지정 후 실제 동작을 독스트링에 문서화 하는 것이다. 디폴트 인자의 값은 모듈이 로드될 때 단 한 번만 평가되기 때문이다.
예시로, 디폴트 값이 ‘현재 시간'(e.g. datetime.datetime.now()
)의 경우라면 자칫하면 인자의 값이 프로그램이 처음 실행된 시점의 now()
값으로 계속 사용될 것이다. 파라미터가 가변적인(mutable) 경우 디폴트 인자로 None
을 사용해야하는지 판단해보자. 요걸 몰라서 장애를 냈던 나…^^;;
def log(message, when=None):
"""
Args:
message: 출력할 메시지
when: 메시지가 발생한 시각(datetime)
디폴트 값은 현재 시간이다.
"""
if when is None:
when = datetime.now()
print(f"{when}: {message}")