关于python中bool类型的重要细节
0. 导读
1. 首次引进
2. 继承于int
1print(True == 1) # 输出True
2print(False == 0) # 输出True
1True + 2 # 输出3
23 * False # 输出0
3. 布尔取值
1a = true
2# NameError: name 'true' is not defined
4. 何为真假
1bool(0) # 整型0 False
2bool(0.0) # 浮点数0 False
3bool(None) # None值 False
4bool('') # 空字符串 False
5bool([]) # 空列表 False
6bool([None]) # 含有None的列表 True
5. 全局实例
1a = True
2b = 1 == 1
3print(id(True)) #140734530754896
4print(id(a)) #140734530754896
5print(id(b)) #140734530754896
6. 逻辑运算
1bool(3 and 4) # True
2bool(3 & 4) # False 因为3&4的位运算结果为0
10 or 1 and not 2
2# False
7. 短路特性
13 and 4 #输出4
20 and 4 #输出0
33 or 4 #输出3
40 or 4 #输出4
1lyst = []
2#可能引发错误的写法
3if lyst[-1]>0: # IndexError: list index out of range
4 print('ok')
5# 稳妥的写法
6if lyst and lyst[-1]>0:
7 print('ok')
8. 龟叔关于布尔值的一些答复
在PEP285文档中,龟叔给出了社区关于布尔类型的一些议论及答复。简要列举如下:
1. str(True)应该返回"True"还是"1"?
答:"True"。虽然True = 1,但str(True)= "1",不如"True"来得直观。
2. 新手倾向于写“ if x == True”?
答:实际上写“ if x”就足够了,会自动转化为布尔型进行真值判断。
3. 将来会取消布尔值的非布尔运算?例如使True+1非法?
答:不会,布尔值应始终允许算术运算。
4. 用boolean替代bool的写法?
答:不会。python一直主张简洁,例如def、int和dict都是缩写,虽然bool对于新手而言不如boolean更直观,但它只是一个单词而已。
5. 将来是否会要求布尔运算有明确的布尔值作为参数?例如"if []"变得非法,而必须写作"if bool([])"?
答:不会,至少龟叔不会同意。(再次说明python语法之简洁)
最后给出一个小彩蛋:
求 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
示例 1:
输入: n = 3
输出: 6
限制:1 <= n <= 10000
来源:力扣(LeetCode) 剑指offer 64#题
1def sumNums(self, n: int) -> int:
2 return n and (n + sumNums(n-1))
_往期文章推荐_
评论