刚接触Python的开发者可能会有疑惑,在进行逻辑判断时,0
和空字符串被判定为False
,为什么'0'
又被判定为了True
?有了这个疑问,导致在写逻辑判断时,往往对自己的代码没有信心,甚至不得不强行做一个类型转换才放心。带着这个疑惑,我查阅了一些资料,将自己的理解记录下来。
对于逻辑判断,Python有一套内建的规则,以下情况会被视为False
:
- None
- False
- 数值0(0或0.0等),字符串'0'为
True
- 空容器类型:空列表[],空元组(),空字典{},空集合set()
- 空字符串""
对于自定义对象,Python按照以下优先级来判断:
- 根据自定义的
__nonzero__()
方法返回值来判断该对象是否为True
或False
- 如果没有定义以上方法,但是定义了len()方法,那么当
__len__()
返回值为0时,该对象为False
,否则为True
- 如果以上两种方法都没有定义,那么该对象为
True
以上关于0
值的判断,可能还是会有疑惑,像PHP这种弱类型语言,0
和'0'
都是False
,怎么到了Python里面就不一样了呢?这里就涉及到一个概念了,Python其实是一个动态类型的强类型语言,同时在Python中布尔类型是整形的子类,所以0
会直接判定为False
,而'0'
是一个非空的字符串,会被判定为True
。关于Python的强弱类型的争论,可以参考这篇文章:Python 到底是强类型语言,还是弱类型语言?
搞清楚以上的几点,对于Python的逻辑判断就不会再有疑惑了。