Python表达式异常行为疑问:x为0时返回0而非布尔值
Python表达式
x and y in a的行为解析 核心原因:运算符优先级 + and的短路求值规则
运算符优先级问题
Python中in运算符的优先级比and高,所以你写的x and y in a,实际执行顺序是x and (y in a),而非你可能误以为的(x and y) in a。and的短路求值逻辑
Python里and是短路运算符:- 如果左边表达式的结果是假值(比如0、
None、空容器等),直接返回左边的值,不会计算右边的表达式; - 如果左边是真值(非0整数、非空容器等),才会计算右边的表达式,返回右边的结果。
- 如果左边表达式的结果是假值(比如0、
对应你的场景
- 当x是1或2(非零,属于真值):
and会继续计算右边的y in a,返回这个判断的结果(True或False); - 当x是0(假值):
and直接返回左边的0,完全不会去处理右边的y in a,所以结果就是0。
你改用x in a and y in a是正确的,因为这个表达式会先判断x是否在列表a中,再判断y是否在a中,符合你需要同时验证两个条件的逻辑。
内容的提问来源于stack exchange,提问作者Denis Padua
相关产品推荐
相关产品推荐

