如果Python函数在参数中收到None
,许多讨论和SO搜索都无法最终回答提供默认值的最佳/最安全/最Pythonic方式的问题。对于datetime
参数,这一点特别提到了,如果重要的话,但理想情况下我们将所有参数类型的方法标准化。
以下两种方法都一直是“正确”的方式:
myval if myval else defaultval
myval or defaultval
它们在功能上是否相同,或两者之间是否存在细微差别?我非常喜欢第二种选择的简洁和清晰,但是对第一种选择的追随者说它并不总是安全的。任何比我更蟒蛇经验的人(例如几乎任何人)的任何指导都将非常感激。
答案 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
。