设置空参数的默认值 (Python)

Mik*_*ike 1 python pep8 default-arguments

假设我们有该函数f,并且我需要参数b默认为空列表,但由于可变默认参数的问题而无法设置 b=[]。

其中哪一个最Pythonic,或者有更好的方法吗?

def f(a, b=None):
   if not b:
     b = []
   pass

def f(a, b=None):
   b = b or []
   pass
Run Code Online (Sandbox Code Playgroud)

chu*_*ckx 5

第一种形式,因为它读起来更容易。在没有任何特定上下文的情况下,您应该显式测试默认值,以避免传入值的潜在真实性问题。

def f(a, b=None):
   if b is None:
     b = []
   pass
Run Code Online (Sandbox Code Playgroud)

PEP 8 开始,编程建议

另外,当你真正的意思是 if x is not None 时,请注意编写 if x —— 例如,当测试默认为 None 的变量或参数是否设置为其他值时。另一个值可能具有在布尔上下文中可能为 false 的类型(例如容器)!

您可以在整个存储库中看到此方法的示例cpython