对于错、0和1、正与反,都是传统意义上的布尔类型。
但在Python语言中,布尔类型只有两个值,True与False。请注意,是英文单词的对与错,并且首字母要大写,不能其它花式变型。
所有计算结果,或者调用返回值是True或者False的过程都可以称为布尔运算,例如比较运算。布尔值通常用来判断条件是否成立。
age = 16 if age >= 18: print("你是个成年人") else: print("你还未成年")
Python内置的bool()
函数可以用来测试一个表达式的布尔值结果。
下面一些例子的结果,可能让你感到惊讶,但事实就是如此,请坦然接受。
>>> True True >>> False False >>> 3 > 2 True >>> 3 > 5 False >>> 3 in [1,2,3] True >>> 3 == 9/3 True >>> 3 is "3" False
为什么3 is "3"
是错误的呢?因为一个是整数一个是字符串,is运算符比较的是对象,当然是错误的。
>>> bool(1) True >>> bool(0) False >>> bool([]) False >>> bool(()) False >>> bool({}) False >>> bool(-1) True >>> bool('') False >>> bool("False") True >>> bool("True") True >>> bool(0.0) False >>> bool(1.0) True >>> bool(-0.0) False
看完上面的例子,你会发现很多想当然的结果居然是错的。0、0.0、-0.0、空字符串、空列表、空元组、空字典
,这些都被判定为False。而-1、"False"
也被判断为True。
布尔类型可以进行and、or和not运算。
and运算是与运算,只有所有都为True,and运算的结果才是True:
>>> True and True True >>> True and False False >>> False and False False >>> 5 > 3 and 3 > 1 True
or运算是或运算,只要其中有一个为True,or运算结果就是True:
>>> True or True True >>> True or False True >>> False or False False >>> 5 > 3 or 1 > 3 True
not运算是非运算,它是单目运算符,把True变成False,False变成True:
>>> not True False >>> not False True >>> not 1 > 2 True
再开下脑洞,布尔类型还能做别的运算吗?试试就知道了!
>>> True > False True >>> True < False False >>> True >=False True >>> True -1 0 >>> True + 1 2 >>> True *3 3 >>> False -1 -1
真的可以!比较运算,四则运算都没有问题。并且在做四则运算的时候,明显把True看做1,False看做0。往往是我们不知道的细节,有时候给我们带来巨大的困扰和疑惑。更多的运算种类支持,请大家自行测试。
空值不是布尔类型,严格的来说放在这里是不合适的,只不过和布尔关系比较紧密。
空值是Python里一个特殊的值,用None表示(首字母大写)。None不能理解为0,因为0是整数类型,而None是一个特殊的值。None也不是布尔类型,而是NoneType。
>>> bool(None) False >>> type(None) <class 'NoneType'>
我们平时最容易犯的错误就是获得了一个None值,却对它进行各种方法调用,例如:
list1 = ["a", "b", None] for char in list1: print(char.join("A")) ###################################### Traceback (most recent call last): File "F:/Python/pycharm/201705/test.py", line 7, in <module> print(char.join("A")) AttributeError: 'NoneType' object has no attribute 'join'
>>> bool("False") and bool("False") True
接下来的几天,准备一口气把您的教程,拜读一遍!
虽然有一些小瑕疵,比如在解释3 is "3"的原因的时候,但是瑕不掩瑜,整体的教程质量非常高!
3 is "3" 之所以错误的本质,is是用来对比两个对象的身份标识是否一致的,这两个对象的身份标识(内存地址)不一样,所以结果是False。