首页 > 解决方案 > Or | 的奇怪行为 运算符和非

问题描述

也许这是一个非常基本的问题,但对我来说没有任何意义。

如果我做:

In: not(False),(not(False))
Out: (True,True)

所以,基本的逻辑运算True Or True就是永远True

但如果我这样做:

not(False)|(not(False))
Out: False

如果我对第一个条件使用括号:

In: (not(False))|(not(False))
Out: True

如果我使用 Or 而不是 |:

In: not(False)or(not(False))
Out: True

是否应该表现得像这样?如果是这样,为什么?

标签: pythonbooleanboolean-operations

解决方案


not不是函数;它是一个一元运算符,其优先级低于|.

not(False)|(not(False)) 
    == not False | (not False)    drop (...) around literal False
    == not (False | (not False)   add (...) implied by operator precedence
    == not (False | True)         evaluate ``not False``
    == not True                   evaluate ``False | True``
    == False                      evaluate ``not True``

not 的优先级高于or,这是您应该使用的运算符。

not(False)or(not(False)) == not False or (not False)
                         == (not False) or (not False)
                         == True or True
                         == True

该文档按优先级从低到高提供了可用运算符的完整列表。


推荐阅读