大多数惯用的方式在python中提供默认值?

时间:2014-04-25 16:15:57

标签: python

如果Python函数在参数中收到None,许多讨论和SO搜索都无法最终回答提供默认值的最佳/最安全/最Pythonic方式的问题。对于datetime参数,这一点特别提到了,如果重要的话,但理想情况下我们将所有参数类型的方法标准化。

以下两种方法一直是“正确”的方式:

  1. myval if myval else defaultval
  2. myval or defaultval
  3. 它们在功能上是否相同,或两者之间是否存在细微差别?我非常喜欢第二种选择的简洁和清晰,但是对第一种选择的追随者说它并不总是安全的。任何比我更蟒蛇经验的人(例如几乎任何人)的任何指导都将非常感激。

3 个答案:

答案 0 :(得分:2)

到目前为止,

1是条件赋值的优先方法(显式优于隐式)

甚至更好地明确

myval = myval if myval is not None else defaultval

甚至更好

def some_function(arg1,arg2="defaultValue"):
    myval = arg2

主要问题是

x = x or y
永远不能为

指定x为0或空数组或任何其他有价值的值

答案 1 :(得分:2)

它们完全相同,但我建议

defaultval if myval is None else myval

(传递即myval = [])时表现正常。

答案 2 :(得分:1)

根据the Documentation,这两个选项在语义上是等价的,您可以选择自己喜欢的选项:

声明:x or y;结果:if x is false, then y, else x和注意: 这是一个短路运算符,所以它只评估第二个参数,如果第一个参数是False