本文整理自《Effective Python 编写高质量 Python 代码的 59 个有效方法》第 20 条:用 None 和文档字符串来描述具有动态默认值的参数
参数的默认值,只会在程序加载模块并读到本函数的定义时评估一次。对于{} 或 [ ] 等动态的值,可能会导致奇怪的行为。
对于以动态值作为实际默认值的关键字参数来说,应该把形式上的默认值写为 None,并在函数的文档字符串里描述该默认值所对应的实际行为。
例1
例如:
from time import *
from datetime import *
def log(message, when=datetime.now()):
print(f"{when}:{message}")
if __name__ == '__main__':
log("Hi there!")
sleep(1)
log("Hi again!")
两次打印实际均是加载模块的时间:
2020-07-28 15:11:00.187906:Hi