Juntamente com as outras respostas que mencionaram a precedência de, not
é menor que in
, na verdade, sua declaração é equivalente a:
not (True in [False, True])
Mas observe que, se você não separar sua condição das outras, o python usará duas funções ( precedence
ou chaining
) para separá-lo e, nesse caso, o python usou precedência. Além disso, observe que, se você quiser separar uma condição, precisará colocar toda a condição entre parênteses, não apenas o objeto ou o valor:
(not True) in [False, True]
Mas, como mencionado, há outra modificação do python nos operadores que está encadeando :
Com base na documentação do python :
Observe que comparações, testes de associação e testes de identidade, todos têm a mesma precedência e um recurso de encadeamento da esquerda para a direita , conforme descrito na seção Comparações.
Por exemplo, o resultado da seguinte instrução é False
:
>>> True == False in [False, True]
False
Porque o python encadeará as instruções da seguinte maneira:
(True == False) and (False in [False, True])
O que exatamente é False and True
isso False
.
Você pode assumir que o objeto central será compartilhado entre 2 operações e outros objetos (Falso neste caso).
E observe que também é válido para todas as comparações, incluindo testes de associação e operações de testes de identidade, que são os seguintes operandos:
in, not in, is, is not, <, <=, >, >=, !=, ==
Exemplo:
>>> 1 in [1,2] == True
False
Outro exemplo famoso é o intervalo de números:
7<x<20
que é igual a:
7<x and x<20