quindi cercavo in qualche code on-line e mi sono imbattuto in una linea (alla linea 286):
if depth > 0 and best <= -MATE_VALUE is None and nullscore > -MATE_VALUE:
Gli operatori di confronto e 'is' - la precedenza degli operatori in python?
La parte che ho avuto difficoltà a capire era il best <= -MATE_VALUE is None
.
Quindi ho attivato l'interprete per vedere come funziona una dichiarazione come value1 > value2 is value3
.
Così ho provato
>>> 5 > 2 is True
False
>>> (5 > 2) is True
True
>>> 5 > (2 is True)
True
La mia domanda
Perché non è 5 > 2 is True
True
? E come funzionano generalmente queste cose?
Grazie.
Cercare la concatenazione dell'operatore. Questo non è in realtà un problema di precedenza. Il primo è trattato logicamente come '(5> 2) && (2 is True)', che è il motivo/come Python consente un costrutto 'a
user2864740
http://stackoverflow.com/questions/25753474/python-comparison-operators-chaining-grouping-left-to-right, http://stackoverflow.com/questions/101268/hidden-features-of-python/101945 # 101945, http: // StackOverflow.it/questions/25103085/chaining-is-operators, http://stackoverflow.com/q/6074018/2864740 – user2864740
FWIW, questa linea mi sembra molto strana - non mi è chiaro quando questa espressione sarà mai vera. Se MATE_VALUE è un numero (che presumibilmente è dovuto a '-MATE_VALUE'), allora non sarà mai None (se lo fosse, il' -' non funzionerebbe.) Quindi se la riga non genera un'eccezione, non restituirà sempre False? – DSM