# 定义函数时,如果想要传入可选的参数,可以给参数加上默认值 def span(a, b=42): print(a, b) span(1) span(1, 2) # 如果给参数指定默认值为None,那么该参数就可以传入可变容器 def span_v2(a, b=None): print(a, b) span_v2(1, [1, 2]) # 但是如果你不想设置一个默认值,如果b没有传入参数那就提示,那么你需要给一个obj _no_value = object() def span_v3(a, b=_no_value): if b is _no_value: print("no b") span_v3(1) # 注意,函数的默认参数只会在函数首次被调用的时候绑定一次,函数第一次被调用后默认参数就不可变了 x = 3 def su_ka(a = x): print(a) su_ka(1) x = 4 su_ka() # 不要用【】这种地址型数据做默认参数,因为它真的可以在过程中被修改 x = [] def su_ka(a = x): print(a) su_ka() x.append(1) su_ka() # 上面使用object作为空参数传入也有这方面的考量,因为用户的输入是不可预知的,而obj几乎不可能被用户创建