Python判断中使用多个and和or的优先级与踩坑

 
Category: Python

一个问题

最近刷力扣,想试试 Python 新支持的海象操作符, 其实就是能在语句中赋值, 类似下面这样:

if (n:=len(nums)):
    return False

但是当出现下面这种情况的时候, 赋值就会失败:

if True or (a:=1):
    print(a)
'''
NameError: name 'a' is not defined
'''

出现这个错误的原因就是 Python 中andor的优先级问题, 当语句中先出现or的时候, 如果or前面的值为True, 那这个语句就判断为真,而不会进行之后的判断了, 所以后面的赋值就不会执行. 那么问题来了, 当一条判断语句中同时出现andor, 这时候其优先级是如何呢? 根据以往的经验, and要比or的优先级高, 然后not的优先级又要比and高.(但是一般为保险起见,还是在具有and操作符的两端加上小括号)

下面我引用了一段博客上看到的内容, 大家可以参考这篇文章,(Python and or not 优先级) 写的非常详细了.

  • not:如果 x 是假的,则“非假”为真,否则 x 是真的,则非真为假
  • and: 找到并返回第一个 False(假)或最后一个 True(真)
  • or: 找到并返回第一个 True(真)或最后一个 False(假)