python中还有一个数据类型是布尔型(bool),只有两个值,也是内置常量: - `True`:真 - `Flase`: 假 一般用于条件判断。 ```python >>> True True >>> Flase False >>> type(False) bool >>> type(True) bool ``` 注意首字母要大写。 ## 布尔类型转换 任意数据都可以通过函数`bool`转换成布尔型。 在python中整数`0`,浮点数`0.0`,复数`0.0+0.0j`,空字符串`''`,空列表`[]`,空元组`()`,空集合`set()`,空字典`{}`,`None`的布尔值都是`False`,其他数值都为`True`。 ```python >>> print(bool(0)) False >>> print(bool(0.0)) False >>> print(bool(0.0+0.0j)) False >>> print(bool('')) False >>> print(bool([])) False >>> print(bool(())) False >>> print(bool({})) False >>> print(bool(set())) False >>> print(bool(None)) False >>> print(bool(0.1)) True ``` ## 比较运算符 相同类型的数据可以通过比较运算符进行比较,结果为布尔型。python中支持的比较运算符有: | 运算符 | 描述 | 实例 | | ------ | ------------------------------- | ------------------- | | == | 等于-比较对象是否相等 | print(a==b) # False | | is | 等于-比较对象的内存地址是否相同 | print(a is b) | | != | 不等于 | print(a!=b) # True | | > | 大于 | print(a>b) # False | | < | 小于 | print(a<b) # True | | >= | 大于等于 | print(a>=b) # False | | <= | 小于等于 | print(a<=b) # True | ```python >>> a = 1 >>> b = 2 >>> a == b False >>> a < b True >>> a != b True >>> a <= b True ``` 数字间的比较运算和数学完全一致,字符串的比较是通过unicode。 需要注意的,和面试常被问到的一个问题是,`==`和`is`的区别。 - `==`是比较两个对象的值是否相等。 - `is`是比较两个对象的`id()`是否相等。 ```python >>> a = 300 >>> b = 300 >>> a == b True >>> a is b False ``` ## 成员运算符 在python中可以通过成员运算符`in`来检查一个对象是否是另外一个对象的成员。 | 运算符 | 描述 | 实例 | | ------ | :---------------------------------------------- | ------------------------------------------------ | | in | 如果在指定的序列中找到值返回True,否则False | `L = [1, 2, 3, 4, 5] a = 3 print(a in L) # True` | | not in | 如果在指定的序列中没有找到值返回True,否则False | `print(a not in L) # False` | 支持成员运算符的基本数据类型有,字符串,列表,元组,集合,字典。 ```python >>> ls = [1,2,3,4] >>> 1 in ls # 检查列表的元素 True >>> s = ['abcdefg'] >>> 'a' in s # 检查字符串 True >>> t = (1,2,3) # 检查元组 >>> 4 in t False >>> d = {'name': 'xinlan', 'age': 18} >>> 'name' in d # 检查字典的键 True >>> st = {1,2,3} >>> 1 in st # 检查集合 True ``` ## 逻辑运算符 python中支持的逻辑运算符有 | 运算符 | 描述 | 实例 | | ------ | ------------------------------------------------ | --------------------- | | and | 与,如果x为False,x and y返回x的值,否则返回y的值 | print(a and b) # True | | or | 或,如果x为True,x and y返回x的值,否则返回y的值 | print(a or b) # True | | not | 非,如果x为True,返回False,反之,返回True | print(not a) # False | 注意仔细看描述,编程语言里的逻辑运算为了效率计算方式有所不同。 - `and` 逻辑与,两边都为真就为真,否则为假。 但注意在python中真正运算时的规则为:如果`x`为`False`那么`x and y`会返回`x`的值,否则返回`y`的值。这样计算的好处是当`x`为`Flase`直接返回`x`的值,不会去计算`y`,提高效率,在python中这种情况叫`短路`。 ```python >>> True and True True >>> True and Flase Flase >>> 0 and 2**3 # 短路,不会计算2**3 0 ``` - `or` 逻辑或,有一边为真即为真,全为假即为假。 但注意在python中真正运算时的规则为:如果`x`为`True`那么`x and y`会返回`x`的值,否则返回`y`的值。这样计算的好处是当`x`为`True`直接返回`x`的值,不会去计算`y`,提高效率,在python中这种情况叫`短路`。 ```python >>> False or False False >>> True or False True >>> 1 or 2**3 # 短路,不会计算2**3 1 ``` - `not` 逻辑非,取反 ```python >>> not False True >>> not True False >>> not 1 False >>> not 0 True ``` ## 布尔型运算 布尔型是整数类型的子类,`True`是真,实际值是`1`,`False`是假,实际值是`0`。布尔型可以直接和数字进行数学计算。 ```python >>> True + 1 2 >>> False - 1 -1 ```