为什么在Python中隐式检查空值?

33 投票
8 回答
7684 浏览
提问于 2025-04-16 20:10

Python的哲学告诉我们,明确的比隐含的要好。

但是,在Python中检查一个集合c是否为空的方式是:

if not c:
    # ...

而检查一个集合是否不为空的方式是:

if c:
    # ...

对于任何可以有“零值”或“空值”的东西(比如元组、整数、字符串、None等),也是这样。

这样做有什么目的呢?如果我不这样做,我的代码会更容易出错吗?还是说这样做能让更多的情况适用(比如某种多态性),因为人们可以重写这些布尔转换?

8 个回答

7

可能被第一和第三条压过:

  • 好看比难看更好。
  • 简单比复杂更好。
7

“简单比复杂好。”

“可读性很重要。”

举个例子,if users 这个写法比 if len(users) == 0 更容易理解。

22

这样做是有原因的,遵循这个最佳实践是有道理的。

当你测试 if object: 时,其实是在调用这个对象的 __bool__ 方法。这个方法可以被重写,也就是说你可以根据对象的行为来定义它。

举个例子,集合的 __bool__ 方法(在Python 2中叫 __nonzero__)会根据集合是否为空来返回一个布尔值,也就是返回真或假。

(参考链接: http://docs.python.org/reference/datamodel.html)

撰写回答