Странное поведение для Or | оператор и не - PullRequest
0 голосов
/ 20 марта 2020

Возможно, это очень базовый c вопрос, но он не имеет никакого смысла для меня.

Если я сделаю:

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

Итак, основа c логическая операция означает, что True Or True всегда True.

Но если я это сделаю:

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

Если я использую скобки для первого условия:

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

И если я использую Или вместо |:

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

Предполагается ли так себя вести? Если так, то почему?

Ответы [ 2 ]

5 голосов
/ 20 марта 2020

not не является функцией; это унарный оператор с более низким приоритетом, чем |.

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

Но not имеет более высокий приоритет, чем or, то есть оператор, который вы должны использовать.

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

В документации представлен полный список доступных операторов в порядке приоритета от низшего к высшему.

1 голос
/ 20 марта 2020

Python использует слова and, or, not для своих логических операторов вместо символов c &&, ||,!.

...