在python中提供默认值的最惯用方法?

Joe*_* P. 6 python

如果 Python 函数None在参数中接收,则许多讨论和 SO 搜索都无法最终回答提供默认值的最佳/最安全/最 Pythonic 方式的问题。这是专门针对datetime参数提出的,以防万一,但理想情况下,我们将我们的方法标准化为所有参数类型。

以下是两种不断出现的“正确”方法:

  1. myval if myval else defaultval
  2. myval or defaultval

它们在功能上是否相同,或者两者之间是否存在细微差别?我非常喜欢第二个选项的简洁明了,但第一个选项的拥护者说它并不总是安全的。任何来自比我更多 Python 经验的人(例如几乎任何人)的任何指导都将不胜感激。

Jor*_*ley 3

1 是迄今为止首选的条件赋值方法(显式优于隐式)

最好是明确的

myval = myval if myval is not None else defaultval
Run Code Online (Sandbox Code Playgroud)

甚至更好

def some_function(arg1,arg2="defaultValue"):
    myval = arg2
Run Code Online (Sandbox Code Playgroud)

主要问题是

x = x or y
Run Code Online (Sandbox Code Playgroud)

永远不能分配 0 的 x 或空数组或任何其他虚假值

  • 是的,我的评论是对OP发表然后删除的评论的回应。我要指出的是,函数默认值中的一个缺陷是方法中的默认值仅在解析时计算一次。对于字符串或数字等不可变类型来说,这并不重要,但对于日期时间或列表等可变类型来说,如果您改变默认值(它将在调用中持续存在),则可能会导致非常意外的行为。对于可变类型,您应该始终将它们默认为 none,然后将它们分配给方法体内的默认值。 (3认同)