专栏名称: Python之禅
分享Python相关技术干货,偶尔扯扯其它的
目录
相关文章推荐
Python爱好者社区  ·  国企官网被挂上“码农的钱你也敢吞,还钱” ·  昨天  
Python开发者  ·  DeepSeek 下棋靠忽悠赢了 ... ·  3 天前  
Python爱好者社区  ·  DeepSeek 最新中国大学排名 ·  2 天前  
Python开发者  ·  “李飞飞团队50 美元炼出 ... ·  5 天前  
Python开发者  ·  国产 DeepSeek V3 ... ·  6 天前  
51好读  ›  专栏  ›  Python之禅

关于python中bool类型,你需要知道这些细节…

Python之禅  · 公众号  · Python  · 2020-03-26 10:29

正文


导读

布尔类型很简单,仅包括True和False两种类型,但你不一定真的了解……



1. 首次引进

2002年3月,龟叔首次在PEP285中首次明确在python中引进布尔类型,并包括两个实例:"True"和"False"



2. 继承于int

布尔类型是int型的一个子类,意味着"True"=1,"False"=0:
1print(True == 1# 输出True
2print(False == 0# 输出True


当然,也支持对布尔值和int值进行简单的计算:
1True + 2 # 输出3
23 * False # 输出0



3. 布尔取值

其他编程语言中,可能布尔值会写作"true"和"false",但在python中必须首字母大写:
1a = true
2# NameError: name 'true' is not defined



4. 何为真假

在python中,数值0(各种类型下的数值0)、空字符串、空列表等以及特殊的None值在判断真假时,将被判断为False:
1bool(0# 整型0 False
2bool(0.0# 浮点数0 False
3bool(None# None值 False
4bool(''# 空字符串 False
5bool([]) # 空列表 False
6bool([None]) # 含有None的列表 True



5. 全局实例

由于布尔类型仅有两个取值,所以所有True或者False具有相同的实例地址:
1a = True
2b = 1 == 1
3print(id(True)) #140734530754896
4print(id(a)) #140734530754896
5print(id(b)) #140734530754896



6. 逻辑运算

与很多编程语言也不同,python中的布尔逻辑运算符是and、or和not,而不是&、||、~(分别代表了二级制位运算中的逻辑与、或、非):
1bool(3 and 4# True
2bool(3 & 4# False 因为3&4的位运算结果为0


三种逻辑运算优先级为not>and>or:
10 or 1 and not 2
2# False



7. 短路特性

短路特性意味着在and或or中,一个值可以判断出结果时,不再对后一个值进行判断,且返回值为可以得出结果的那个值:
13 and 4 #输出4
20 and 4 #输出0
33 or 4 #输出3
40 or 4 #输出4


利用这一特点,在有些程序设计中非常有用。例如判断一个列表中最后一个元素是否大于0时,由于不确定列表是否为空,所以直接按下标取值可能引发错误,比较稳妥的判断方式为:






请到「今天看啥」查看全文