Or 的奇怪行为 | 运算符和非

Iur*_*usa 0 python boolean boolean-operations

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

如果我做:

In: not(False),(not(False))
Out: (True,True)
Run Code Online (Sandbox Code Playgroud)

因此,基本的逻辑运算True Or True始终为True

但如果我这样做:

not(False)|(not(False))
Out: False
Run Code Online (Sandbox Code Playgroud)

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

In: (not(False))|(not(False))
Out: True
Run Code Online (Sandbox Code Playgroud)

如果我使用 Or 而不是 |:

In: not(False)or(not(False))
Out: True
Run Code Online (Sandbox Code Playgroud)

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

che*_*ner 5

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``
Run Code Online (Sandbox Code Playgroud)

not 确实比 具有更高的优先级or,这是您应该使用的运算符。

not(False)or(not(False)) == not False or (not False)
                         == (not False) or (not False)
                         == True or True
                         == True
Run Code Online (Sandbox Code Playgroud)

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