Or的奇怪行为运算符而不是

时间:2020-03-20 15:14:34

标签: python boolean boolean-operations

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

如果我这样做:

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

是不是应该这样表现? 如果是这样,为什么?

2 个答案:

答案 0 :(得分: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``

但是not 确实的优先级高于or,后者是您应该使用的运算符。

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

文档按优先级从低到高的顺序提供了full list个可用的运算符。

答案 1 :(得分:1)

Python的布尔运算符使用符号andornot,而不是符号&&,|| !!。

相关问题