💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
### 2.4.4 Python 中真假的表示与计算* 如前所述,较新版本的 Python 引入了内建类型 bool,并且定义了布尔值 True 和 False。而在此之前,Python 曾经利用 1 和 0 来作为布尔值。 事实上,如今的 Python 在表达真假方面更加灵活——任何内建类型的值都可以解释成布尔值。例如,数值(int、long、float)可以解释成布尔值:0 为 False,非 0 值为 True。又如,字符串也可以解释成布尔值:空串为 False,非空字符串为 True。以后介 绍的列表、元组等数据类型的值也都可以解释为布尔值。 Python 对布尔值的灵活处理方式也影响了逻辑运算符的含义。在 Python 中,布尔表达 式的结果不仅可以是“正宗的”布尔值 True 和 False,还可以是如上所述的各种“非正 宗”布尔值。下面介绍 Python 在实现逻辑运算符采取的策略,我们用 a、b 表示任何表达式(不一定是布尔表达式!)。 (1)a and b:如果 a 的值可解释为 False,则返回 a 的值;否则返回 b 的值。 (2)a or b:如果 a 的值可解释为 False,则返回 b 的值;否则返回 a 的值。 (3)not a:如果 a 的值可解释为 False,则返回 True;否则返回 False。 这些规则看上去有点怪,但仔细思考之后就能理解,它们并没有违反基本的逻辑运算的定义。 以 a and b 为例分析如下:当 a 的值不能解释为 True,我们就不必计算 b 的值,而是直 接返回 a 的值(可解释为 False)作为整个表达式的值;当 a 的值可解释为 True,那么 整个表达式的真假就取决于 b 的值,b 真则表达式真,b 假则表达式假,因此我们可以返回 b 的值作为表达式的值。总之,当且仅当 a 和 b 都可解释为 True 时,表达式 a and b 的 值才可解释为 True。这是完全符合逻辑运算定义的。 对于 or 和 not 也是一样。 下面看几个例子: ``` >>> 2 and "hello" 'hello' ``` 说明:Python 先计算 2,发现它是非 0 值,可解释为 True,于是按上述规则(1),返回"hello"的值作为结果。 ``` >>> (4 > 5) or 3 3 ``` 说明:Python 先计算(4 > 5),发现结果为 False,根据上述规则(2),返回 3 的值作为 表达式的值。 ``` >>> s = "hello" >>> not s[3:3] True ``` 说明:Python 先计算 s[3:3]的值,即字符串 s 的切分操作,但这个索引区间是不成立的: 不可能从索引 3 开始,又以 3 作为结束的上限(因为索引区间的上限是不包含在内的)。因 此切分结果是空串。空串被解释为 False,根据上述规则(3),返回 True。 综上所述,Python 对布尔值和布尔运算的处理很灵活,有时能够便利程序设计。但代价是布尔表达式变得难以理解,很容易导致微妙的错误,所以建议读者慎用。