Python中如何正确使用括号?两段逻辑判断代码运行结果为何不同
Python逻辑判断结果差异原因及正确写法
结果差异原因
- 首先明确Python中
and逻辑运算符的求值规则:对a and b,如果a的布尔值为真,返回值为b,否则返回a。所有非空字符串的布尔值都为真,因此('txt' and 'jpg')的运算结果为'jpg'。 - 第一段代码等价于判断
后缀既不是txt也不是jpg:你的路径后缀是txt,不满足第一个判断条件,因此and连接的整个表达式结果为False,符合你原本的预期逻辑。 - 第二段代码经过括号内的运算后,等价于
p[-3:] != 'jpg':你的路径后缀是txt,显然不等于jpg,因此结果为True,和你想要的逻辑完全不符。
正确写法
方案1(更简洁,推荐)
直接用成员判断避免写多个重复的逻辑判断,可读性高且不容易出错:
# 判断后缀不在指定列表中 p[-3:] not in ('txt', 'jpg')
如果需要适配不同长度的后缀(比如html、json等),更规范的写法是调用标准库获取后缀:
import os ext = os.path.splitext(p)[1].lstrip('.').lower() ext not in ('txt', 'jpg')
方案2(使用逻辑运算符的规范写法)
如果需要用逻辑运算符,每个比较条件必须单独书写,不要合并多值的判断,不确定优先级时可以给每个条件加括号明确边界:
# 每个比较单独书写,括号可加可不加,加了逻辑更清晰 (p[-3:] != 'txt') and (p[-3:] != 'jpg')
内容的提问来源于stack exchange,提问作者Oleg
相关产品推荐
相关产品推荐

