python之布尔类型
1 布尔类型
布尔类型是计算机中最基本的类型,它是计算机二进制世界的体现,一切都是0
和1
。Python中的布尔类型只有两种值:True
和False
。(注意:首字母都是大写,与C++、JavaScript中的小写有所不同)
布尔类型回答的是是非
问题,那么什么情况下是True
,什么情况下是False
呢? Python里面实现了一个类型对象
叫做bool
,bool是一个int
的子类,内置的True
和False
就是bool仅有的两个实例对象。
2 bool() 函数
使用bool()
函数可以直接给出 True
或者 False
的结果:
>>> bool(None)
False
>>> bool(0)
False
>>> bool([])
False
>>> bool(())
False
>>> bool('')
False
>>> bool({})
False
以上是判断为假的情况,总结一下为假的情况有:
(1)None和False
(2)数值中的0
, 0.0
, 0j
(虚数),Decimal(0)
,Fraction(0, 1)
(3)空字符串(''
)、空元组(()
)、空列表([]
)
(4)空字典({}
)、空集合(set()
)、range(0)
(5)对象默认为True,除非它有bool()方法且返回False或len()方法且返回0.
3 逻辑运算符
Python 总共有三个逻辑运算符:and
、or
和 not
。
下面的表列举了布尔运算的结果,优先级为升序:
运算 | 表达式 | 结果 | 说明 |
---|---|---|---|
或运算 | x or y | 如果x为False则取决于y;如果x为True则不考虑 | (1) |
与运算 | x and y | 如果x为False则不考虑y;如果x为True则取决于y | (2) |
非运算 | not x | 如果x为False则为True,否则为False | (3) |
说明:
(1)or
是一种“短路运算符”,只有当第一个为False时才去验证第二个。即:两个变量只要有一个为True则为True。
(2)and
也是种“短路运算符”,只有当第一个为True时才去验证第二个。即:两个变量都为True时结果才为True。
(3)not
的优先级比非布尔运算符底,所以not a == b
解释为not (a == b)
,并且a == not b
是语法错误。
上面讲到,or
,and
,not
的优先级是依次递增的,优先级跟小学数学中先乘除后加减但括号里面的更优先是一样的。
猜猜下面的代码会输出什么:
print('' or 'b' and 'c')
优先级and
大于or
,所以先计算and
:
(1)先计算'b' and 'c'
时,'b'
是True,则结果取决于'c'
,因此返回'c'
。
(2)再计算'' or 'c'
,''
是False,则结果取决于'c'
,因此返回'c'
。
(3)最后打印出:c
。
如果给到操作数的是两个数值,那么它的运算结果也是数值:
>>> 3 and 4
4
>>> 4 or 5
4
如果给到操作数的是两个字符串,那么它的结果也是字符串:
>>> "FishC" and "LOVE"
'LOVE'
4 比较运算
前面提到,布尔值反应的是“是非”,有比较才有是非。Python中有8中比较运算。它们有相同的优先级,比布尔运算的优先级高。比较运算符可以任意的连写,比如:x < y <= z
相当于x < y and y <= z
。
5 总结
布尔类型(True, False)表示“是非”,是比较运算的结果,是条件判断的结果,从而决定程序的流程和分支走向。