Python True/False 求值规范 | Google 官方写法
True/False的求值
Tip
尽可能使用”隐式”假值。
定义:
Python 在计算布尔值时会把一些值视为 False。简单来说,所有的“空”值都是假值。因此,0, None, [], {}, "" 作为布尔值使用时相当于 False。
优点:
Python 布尔值可以让条件语句更易懂,减少失误。
多数时候运行速度也更快。
缺点:
对 C/C++ 开发人员来说,可能看起来有点怪。
结论:
尽可能使用“隐式”假值,例如:使用 if foo: 而非 if foo != []: 。不过还是有一些注意事项需要你铭记在心:
- 一定要用
if foo is None:(或者is not None) 来检测None值。例如,如果你要检查某个默认值为None的参数有没有被调用者覆盖,覆盖的值在布尔语义下可能也是假值! - 永远不要用
==比较一个布尔值是否等于False。应该用if not x:代替。如果你需要区分False和None,你应该用复合表达式,例如if not x and x is not None:。 - 多利用空序列(字符串, 列表, 元组)是假值的特点。因此
if not seq:比if len(seq):更好,if not seq:比if not len(seq):更好。 -
处理整数时,使用隐式 False 可能会得不偿失(例如不小心将
None当做0来处理)。你可以显式比较整型值与0的关系 (len()的返回值例外)。正确:
if not users: print('无用户') if i % 10 == 0: self.handle_multiple_of_ten() def f(x=None): if x is None: x = []错误:
if len(users) == 0: print '无用户' if not i % 10: self.handle_multiple_of_ten() def f(x=None): x = x or [] - 注意,‘
0’(字符串, 不是整数)作为布尔值时等于True。 - 注意,把 Numpy 数组转换为布尔值时可能抛出异常。因此建议用
.size属性检查np.array是否为空 (例如if not users.size)。