Ich war mir dessen nicht bewusst, aber anscheinend die and
und or
Schlüsselwörter sind keine Operatoren. Sie erscheinen nicht in der list of python operators. Nur aus reiner Neugier, warum ist das? Und wenn sie nicht Betreiber sind, was genau sind sie?Warum sind "und" und "oder" Operatoren in Python nicht?
Antwort
Weil sie Kontrollflusskonstrukte sind. Im Einzelnen:
- wenn das linke Argument
and
False ergibt, wird das rechte Argument nicht an allen - wenn das linke Argument
or
wertet True ausgewertet bekommen, das richtige Argument erhält nicht ausgewertet bei Alle
So ist es nicht einfach eine Frage der reservierten Worte. Sie verhalten sich nicht wie Operatoren, da Operatoren immer alle ihre Argumente auswerten.
Sie können dies im Kontrast zu bitweise binäre Operatoren, die, wie der Name schon sagt, sind Operatoren:
>>> 1 | (1/0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
>>> 1 or (1/0)
1
Wie Sie sehen, das bitweise OR (|
) wertet beide ihre Argumente. Das Schlüsselwort or
bewertet sein rechtes Argument jedoch überhaupt nicht, wenn das linke Argument True ergibt; deshalb wird in der zweiten Anweisung kein ZeroDivisionError
ausgelöst.
Sie klassifizieren sie als Keywords früher im Dokument.
Wahr, aber das bedeutet eigentlich nichts anderes als dass sie nicht als Variablennamen verwendet werden können. –
Die URL, mit der das OP verknüpft ist, hat mit der lexikalischen Analyse zu tun, und lexikalisch sind sie Schlüsselwörter, keine Operatoren. Wenn die Frage als eine der Syntax formuliert würde, dann würde die Down-Vote Sinn machen. – Jacob
Sie sind keywords, weil sie reservierte Bezeichner sind, keine speziellen Token von Symbolen.
Sie können nicht neu definiert werden, um typspezifische Operationen zu unterstützen, sodass sie nicht in den Bereich der anderen Operatoren fallen.
Ich vermute, dass deine Kausalität falsch ist. Sie können nicht neu definiert werden, um typspezifische Operationen zu unterstützen, da sie keine Operatoren sind. –
Python derzeit nicht bieten keine ‚xxx‘ spezielle Methoden entsprechend dem ‚und‘, ‚oder‘ und ‚nicht‘ Boolesche Operatoren. Im Falle von "und" und "oder" ist der wahrscheinlichste Grund, dass diese Operatoren eine Kurzsummierungssemantik haben, d. H. Der zweite Operand wird nicht ausgewertet, wenn das Ergebnis vom ersten Operanden bestimmt werden kann. Die übliche Technik, spezielle Methoden für diese Operatoren bereitzustellen, würde daher nicht funktionieren.
Quelle: PEP 335
PEP 335 spricht über die Möglichkeit, das Hinzufügen überladbaren Betreiber zu haben, und bespricht dieses Thema ein wenig.
Beachten Sie, dass '&&' und '||' in C als "Operatoren" bezeichnet werden, obwohl sie kurzgeschlossen sind (nicht die rechte Seite in Abhängigkeit vom Wert der linken Seite auswerten). Ähnlich für einige andere Sprachen. –
Ja, ich stimme zu, dass die Terminologie variieren kann. Der wichtigste Punkt ist jedoch, dass sie grundlegend andere Eigenschaften haben, als Python allgemein Operatoren nennt. –