python oder auf Bedienermodul [duplizieren]

7

Im Modul operator haben wir die Funktion or_ , die bitweise oder ( | ).

Ich kann jedoch nicht das logische oder ( or ) finden.

Die Dokumentation scheint sie nicht aufzulisten .

Ich frage mich, warum ist es nicht enthalten? Ist es nicht ein Operator?

Gibt es eine eingebaute Funktion, die ihr Verhalten bereitstellt?

    
goncalopp 13.03.2014, 16:35
quelle

4 Antworten

14

Die or operator Kurzschlüsse ; Der rechte Ausdruck wird nicht ausgewertet, wenn die linke Hand einen wahren Wert zurückgibt. Dies gilt auch für den Operator and . Wenn der Ausdruck auf der linken Seite einen falschen Wert zurückgibt, wird der Ausdruck auf der rechten Seite nicht ausgewertet.

Das konnte man nicht mit einer Funktion machen; Alle Operanden müssen ausgewertet werden, bevor die Funktion aufgerufen werden kann. Daher gibt es keine entsprechende Funktion für das Modul operator .

Vergleiche:

%Vor%

mit

%Vor%

Der letzte Ausdruck schlägt fehl, weil Sie None nicht als aufrufbar verwenden können. Die erste Version funktioniert, weil der Operator and den Ausdruck foo(bar) nicht auswertet.

    
Martijn Pieters 13.03.2014, 16:37
quelle
6
___ answer22391787 ___

Es ist nicht möglich:

Dies kann explizit in den Dokumenten gefunden werden :

  

Der Ausdruck x oder y wertet zuerst x aus; Wenn x wahr ist, ist sein Wert   ist zurückgekommen; Andernfalls wird y ausgewertet und der resultierende Wert ist   zurückgegeben.

Sie existiert nicht als or -Funktion, da sie aufgrund der Sprachspezifikation nicht implementiert werden kann, da Sie die Ausführung eines aufgerufenen Arguments beim Aufruf der Funktion nicht verzögern können. Hier ist ein Beispiel für or in Aktion:

%Vor%

Wenn Balken aufgerufen wird, erhalten wir einen Laufzeitfehler. Und wenn wir uns die folgende Zeile ansehen, sehen wir, dass Python die Auswertung der Zeile verkürzt, da or einen or -ish Wert zurückgibt.

%Vor%

Wir können approximieren:

Wir können dieses Verhalten simulieren, indem wir nicht aufgerufene Funktionen übergeben und sie dann in unserer Funktion operator aufrufen:

%Vor%

Aber Sie können nicht die Ausführung von callables ausführen, die an eine Funktion übergeben werden:

%Vor%

Es wäre also unpassend, eine solche Funktion in die eingebaute oder Standard-Bibliothek aufzunehmen, da Benutzer erwarten würden, dass eine %code% -Funktion nur als boolescher %code% -Test funktioniert, was wiederum unmöglich ist.

    
___ antwort22385936 ___

Einer integrierten %code% -Funktion am nächsten kommt any :

%Vor%

Wenn Sie die Funktionalität von %code% für die Rückgabe von nicht booleschen Operanden kopieren möchten, können Sie verwenden nächste mit einem Filter:

%Vor%

Aber wie Martijn sagte, sind auch keine echten Drop-In-Ersatz für %code% , weil es kurzschließt. Eine echte %code% -Funktion müsste Funktionen akzeptieren, um die Auswertung aller Ergebnisse vermeiden zu können:

%Vor%

Dies ist etwas unhandlich und würde mit dem Rest des Moduls %code% inkonsistent sein, daher ist es wahrscheinlich das Beste, dass es weggelassen wird und Sie stattdessen andere explizite Methoden verwenden.

    
___ answer22385604 ___

Der Grund, warum Sie %code% nach Ausführung von %code% erhalten, ist, weil %code% ist %code% , so dass der Ausdruck erfüllt wurde.

Es könnte mehr Sinn ergeben, wenn Sie %code% ausführen. Es gibt %code% zurück, weil die erste Anweisung %code% oder %code% ist, damit die zweite Anweisung ausgewertet wird. In diesem Fall wird %code% zu einem %code% booleschen Wert ausgewertet.

Die Operatoren %code% und %code% werten den ersten Wert aus und stopfen das Ergebnis dann in die Wahrheitstabelle "AND und OR". Im Fall von %code% wird der zweite Wert nur berücksichtigt, wenn der erste Wert auf %code% lautet. Im Falle des Operators %code% , wenn der erste Wert zu %code% ausgewertet wird, ist der Ausdruck wahr und kann zurückgeben, wenn nicht der zweite Wert ausgewertet wird.

    
___ tag123operators ___ Operatoren sind Symbole, die in fast allen Programmier- und Codierungssprachen vorkommen, um Berechnungen und Vergleiche von Daten durchzuführen. ___ tag123python ___ Python ist eine dynamische und stark typisierte Programmiersprache, die die Usability betont. Zwei ähnliche, aber größtenteils inkompatible Versionen von Python sind weit verbreitet (2 und 3). Wenn Sie eine versionsspezifische Python-Frage haben, sollten Sie die Tags [python-2.7] oder [python-3.x] zusätzlich zum Tag [python] verwenden. Wenn Sie eine Python-Variante wie jython, pypy, iron-python usw. verwenden, kennzeichnen Sie diese bitte entsprechend. ___ qstnhdr ___ python oder auf Bedienermodul [duplizieren] ___ answer22385169 ___

Die %code% operator Kurzschlüsse ; Der rechte Ausdruck wird nicht ausgewertet, wenn die linke Hand einen wahren Wert zurückgibt. Dies gilt auch für den Operator %code% . Wenn der Ausdruck auf der linken Seite einen falschen Wert zurückgibt, wird der Ausdruck auf der rechten Seite nicht ausgewertet.

Das konnte man nicht mit einer Funktion machen; Alle Operanden müssen ausgewertet werden, bevor die Funktion aufgerufen werden kann. Daher gibt es keine entsprechende Funktion für das Modul %code% .

Vergleiche:

%Vor%

mit

%Vor%

Der letzte Ausdruck schlägt fehl, weil Sie %code% nicht als aufrufbar verwenden können. Die erste Version funktioniert, weil der Operator %code% den Ausdruck %code% nicht auswertet.

    
___ qstntxt ___

Im Modul %code% haben wir die Funktion %code% , die bitweise oder ( %code% ).

Ich kann jedoch nicht das logische oder ( %code% ) finden.

Die Dokumentation scheint sie nicht aufzulisten .

Ich frage mich, warum ist es nicht enthalten? Ist es nicht ein Operator?

Gibt es eine eingebaute Funktion, die ihr Verhalten bereitstellt?

    
___
nmclean 13.03.2014 17:09
quelle
1

Es ist nicht möglich:

Dies kann explizit in den Dokumenten gefunden werden :

  

Der Ausdruck x oder y wertet zuerst x aus; Wenn x wahr ist, ist sein Wert   ist zurückgekommen; Andernfalls wird y ausgewertet und der resultierende Wert ist   zurückgegeben.

Sie existiert nicht als operator -Funktion, da sie aufgrund der Sprachspezifikation nicht implementiert werden kann, da Sie die Ausführung eines aufgerufenen Arguments beim Aufruf der Funktion nicht verzögern können. Hier ist ein Beispiel für or in Aktion:

%Vor%

Wenn Balken aufgerufen wird, erhalten wir einen Laufzeitfehler. Und wenn wir uns die folgende Zeile ansehen, sehen wir, dass Python die Auswertung der Zeile verkürzt, da foo einen True -ish Wert zurückgibt.

%Vor%

Wir können approximieren:

Wir können dieses Verhalten simulieren, indem wir nicht aufgerufene Funktionen übergeben und sie dann in unserer Funktion or aufrufen:

%Vor%

Aber Sie können nicht die Ausführung von callables ausführen, die an eine Funktion übergeben werden:

%Vor%

Es wäre also unpassend, eine solche Funktion in die eingebaute oder Standard-Bibliothek aufzunehmen, da Benutzer erwarten würden, dass eine or -Funktion nur als boolescher or -Test funktioniert, was wiederum unmöglich ist.

    
Aaron Hall 13.03.2014 21:54
quelle
-2

Der Grund, warum Sie 1 nach Ausführung von >>> 1 or 2 erhalten, ist, weil 1 ist true , so dass der Ausdruck erfüllt wurde.

Es könnte mehr Sinn ergeben, wenn Sie >>> 0 or 2 ausführen. Es gibt 2 zurück, weil die erste Anweisung 0 oder false ist, damit die zweite Anweisung ausgewertet wird. In diesem Fall wird 2 zu einem true booleschen Wert ausgewertet.

Die Operatoren and und or werten den ersten Wert aus und stopfen das Ergebnis dann in die Wahrheitstabelle "AND und OR". Im Fall von and wird der zweite Wert nur berücksichtigt, wenn der erste Wert auf true lautet. Im Falle des Operators or , wenn der erste Wert zu true ausgewertet wird, ist der Ausdruck wahr und kann zurückgeben, wenn nicht der zweite Wert ausgewertet wird.

    
Doowybbob 13.03.2014 16:55
quelle

Tags und Links