为什么在Python中隐式检查空值?
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__
)会根据集合是否为空来返回一个布尔值,也就是返回真或假。