12. 逻辑运算与布尔测试
12.1. 逻辑运算
运算符 |
描述 |
---|---|
and |
与,x and y:如果x为False,返回False,否则返回y的 计算值 |
or |
或,x or y:如果x为True,返回True,否则返回y的 计算值 |
not |
非,not x:如果x为True,返回False,否则返回True |
1>>> print 'a'<'b' and 'c'
2c
3>>> print 'a'>'b' and 'c'
4False
5
6>>> print 'a'>'b' or 'c'
7c
8>>> print 'a'<'b' or 'c'
9True
12.2. 成员运算
运算符 |
描述 |
---|---|
in |
如果在指定列表/元组/字符串/字典中找到值,返回True,否则返回False |
not in |
如果未在指定列表/元组/字符串/字典中找到值,返回True,否则返回False |
1>>> 1 in [1,2,3]
2True
3>>> 1 in (1,2)
4True
5>>> 'a' in 'abc'
6True
7
8>>> cnt = {'a':1}
9>>> 'a' in cnt
10True
11>>> {'a':1} in cnt
12TypeError: unhashable type: 'dict'
Note
查找的值必须是可哈希的,也就是不可变类型。
12.3. 布尔测试
下面对象的布尔值都是 False
:
False(布尔类型)
None
“”(空字符串)
[](空列表)
{}(空字典)
()(空元组)
所有值为零的数
0(整型)
0.0(浮点型)
0L(长整型)
0.0 + 0.0j(复数)
1flag = None
2if not flag:
3 print "flag is none:", flag
4 print flag == False
5
6flag = {}
7if not flag:
8 print "flag is empty:", flag
9 print flag == False
10flag = {'a':1}
11if flag:
12 print "flag is not empty:", flag
13
14flag = []
15if not flag:
16 print "flag is empty:", flag
17 print flag == False
18flag = [1]
19if flag:
20 print "flag is not empty:", flag
21
22flag = ""
23if not flag:
24 print "flag is empty:", flag
25 print flag == False
26flag = "a"
27if flag:
28 print "flag is not empty:", flag
29
30flag = 0.0
31if not flag:
32 print "flag is zero:", flag
33 print flag == False
34flag = 1
35if flag:
36 print "flag is not empty:", flag
输出结果为:
flag is none: None
False
flag is empty: {}
False
flag is not empty: {'a': 1}
flag is empty: []
False
flag is not empty: [1]
flag is empty: ## ""
False
flag is not empty: a
flag is zero: 0.0
True ## 只有这一个是True:0.0 == False
flag is not empty: 1
Note
布尔值是False,不代表等于False。
零的布尔值是False,同时也等于False。
12.4. any 和 all
当 x
的任一元素的布尔测试为 True
, any(x)
返回 True
,否则返回 False
。
当 x
的所有元素的布尔测试为 True
, all(x)
返回 True
,否则返回 False
。
1>>> x = [1, 2, '', 3]
2>>> all(x)
3False
4>>> any(x)
5True
6>>> x = [0, 0, 0, 0]
7>>> any(x)
8False
9>>> all([])
10True
11>>> all([[]])
12False
12.5. 参考资料
Python基本数据类型