Verstehen der Operatorpriorität in Python: 'in' vs. Vergleich
In Python kann die Bestimmung der Reihenfolge von Operationen für die Auswertung von Ausdrücken von entscheidender Bedeutung sein korrekt. Die Rangfolge der Operatoren gibt deren Priorität an, wobei höherrangige Operatoren zuerst ausgewertet werden.
Betrachten Sie die folgenden Ausdrücke:
<code class="python">'1' in '11' ('1' in '11') == True</code>
Beide Ausdrücke ergeben „True“, was darauf hinweist, dass es sich um den „in“-Operator handelt hat eine niedrigere Priorität als der Vergleichsoperator '=='. Wenn Sie jedoch Klammern um den „in“-Ausdruck setzen, ändert sich die Auswertungsreihenfolge:
<code class="python">'1' in ('11' == True)</code>
Dieser Ausdruck löst einen TypeError aus, der darauf hinweist, dass etwas nicht ganz stimmt. Um zu verstehen, warum, untersuchen wir die Operatorpriorität von Python.
Laut der Python-Dokumentation haben „in“ und „==“ die gleiche Priorität. Daher wertet Python sie von links nach rechts aus. In diesem Fall wertet Python zunächst „1“ in „11“ aus, was zu „True“ führt. Allerdings wird der Teil „== True“ dann als boolescher Ausdruck ausgewertet, was zum TypeError führt, da ein boolescher Wert nicht iteriert werden kann.
Um dieses Problem zu beheben, können Sie die Verkettung nutzen. Durch die Verkettung können mehrere Operatoren mit derselben Priorität gruppiert und von links nach rechts ausgewertet werden. Durch das Hinzufügen von Klammern wie folgt können Sie erzwingen, dass der „in“-Operator zuerst ausgewertet wird:
<code class="python">'1' in '11' == True</code>
Dieser Ausdruck ergibt „False“, was Ihren Erwartungen entspricht. Die Klammern stellen sicher, dass der „in“-Operator zuerst ausgewertet wird, was zu „True“ führt. Dies wird dann im Ausdruck „==“ mit „True“ verglichen, was „False“ ergibt.
Das obige ist der detaillierte Inhalt vonWarum gibt „1 in \'11\' == True\' in Python einen TypeError zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!