在Python中提供默认值的最佳惯用方法?
很多讨论和在StackOverflow上的搜索都没能明确回答一个问题,那就是在Python函数接收到参数为None
时,提供默认值的最佳、安全和最“Pythonic”的方法是什么。这个问题特别是在涉及到datetime
参数时提到的,不过理想情况下,我们希望对所有参数类型都能统一处理。
这里有两种方法,它们都被认为是“正确”的做法:
myval if myval else defaultval
myval or defaultval
这两种方法在功能上是一样的吗,还是说它们之间有一些微妙的区别?我个人更喜欢第二种方法,因为它简洁明了,但支持第一种方法的人说它并不总是安全。希望能得到一些比我更有Python经验的人的指导(比如几乎任何人),我会非常感激。
3 个回答
1
根据文档,这两种写法在意义上是一样的,你可以选择你喜欢的方式:
表达式:x or y
;结果是:如果 x 是假(false),那么结果是 y,否则结果是 x
。注意:这是一个短路运算符,所以只有在第一个参数是False
时,才会去计算第二个参数。
2
它们是完全相同的,不过我建议使用下面的方式:
defaultval if myval is None else myval
(这样做在传入比如 myval = []
的时候会表现得很好。)
3
1 是最受欢迎的条件赋值方法(明确比隐含要好)
而且最好是明确的
myval = myval if myval is not None else defaultval
或者更好一些
def some_function(arg1,arg2="defaultValue"):
myval = arg2
主要的问题是
x = x or y
永远不能把 x 赋值为 0、空数组或其他任何“假”的值