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

6 投票
3 回答
3506 浏览
提问于 2025-04-18 04:15

很多讨论和在StackOverflow上的搜索都没能明确回答一个问题,那就是在Python函数接收到参数为None时,提供默认值的最佳、安全和最“Pythonic”的方法是什么。这个问题特别是在涉及到datetime参数时提到的,不过理想情况下,我们希望对所有参数类型都能统一处理。

这里有两种方法,它们都被认为是“正确”的做法:

  1. myval if myval else defaultval
  2. 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、空数组或其他任何“假”的值

撰写回答