目录:Python数据结构之布尔类型(bool)
- 一、布尔说明
- 二、判定
- 三、布尔运算: and, or, not
一、布尔说明
- Python 中布尔值使用常量True 和 False来表示;注意大小写。
- 比较运算符< > == 等返回的类型就是bool类型;布尔类型通常在 if 和 while 语句中应用。
- 注意的是,python中,bool是int的子类(继承int),故
True ==1
和False==0
是会返回Ture的。 - Python2中True/False不是关键字,因此我们可以对其进行任意的赋值;同理,Python 中 if(True) 的效率远比不上if(1);Python2 版本中True False不是关键字,可被赋值,Python3中会报错。
- 由于bool是int,可进行数字计算 ,例如:print(True+True),输出是2。
二、判定
以下值会被判断是True或False:
- 数字0 ---------- False
- None ---------- False; None是真空
- null (包括空字符串、空列表、空元祖…) --------- False
除了以上的,其他的表达式均会被判定为 True,这个需要注意,与其他的语言有比较大的不同。
In [3]: bool(None)
Out[3]: False
In [4]: bool(0)
Out[4]: False
In [5]: bool([])
Out[5]: False
In [6]: bool(())
Out[6]: False
In [7]: bool('')
Out[7]: False
In [8]: bool({})
Out[8]: False
以上是判断为假的情况,总结一下为假的情况有:
- None, False
- 数值中的0, 0.0, 0j(虚数), Decimal(0), Fraction(0, 1)
- 空字符串(‘’)、空元组(())、空列表([])
- 空字典({})、空集合(set())
- 对象默认为True,除非它有bool()方法且返回False或len()方法且返回0
三、布尔运算: and, or, not
下面的表列举了布尔运算的结果,优先级为升序:
说明:
(1)or 是一种“短路运算符”,只有当第一个为False时才去验证第二个。即:两个变量只要有一个为True则为True。
(2)and也是种“短路运算符”,只有当第一个为True时才去验证第二个。即:两个变量都为True时结果才为True。
(3)not的优先级比非布尔运算符底,所以not a == b
解释为not (a == b)
,并且a == not b
是语法错误。
上面讲到,or, and, not的优先级是依次递增的,优先级跟小学数学中先乘除后加减但括号里面的更优先是一样的。
优先级and大于or,所以先计算and:
(1)先计算’b’ and ‘c’时,‘b’是True,则结果取决于’c’,因此返回’c’。
(2)再计算’’ or ‘c’,‘‘是False,则结果取决于’C’,因此返回’c’。
(3)最后打印出:c。