2016-05-24 10 views
2

Ich arbeite mit web2py und ich habe durch den Quellcode gesucht, um ein besseres Verständnis zu bekommen. Mehrere Male habe ich Zuweisungen haben gesehen, wieIn Python, was ist der Punkt von 'x oder False' und 'False und x?

# in file appadmin.py 
is_gae = request.env.web2py_runtime_gae or False 

Wenn request.env.web2py_runtime_gae wahr ist, dann Falsch keine Rolle spielt. In beiden Fällen wird der Ausdruck falsch, wenn request.env.web2py_runtime_gae false ist.

Und auch:

# in file appadmin.py 
if False and request.tickets_db: 
    from gluon.restricted import TicketStorage 

Der zweite Teil der und Klausel nie ausgewertet wird, weil Falsch und x immer false zurück.

Also warum sollte man so etwas tun?

Antwort

5

Nicht ganz wie du annimmst. Python evaluates conditions lazily, wenn also bekannt ist, dass der Wert die Bedingung erfüllt, wird die Auswertung beendet. Sehen Sie folgendes Beispiel:

>>> None or False 
False 
>>> True or False 
True 
>>> 0 or False 
False 
>>> 'Value' or False 
'Value' 

die zweite, wie pro lazy evaluation, einfach False auf diese Aussage zurück und den Rest der Aussagen werden nicht bewertet. Dies kann eine Möglichkeit sein, die if-Anweisung unbedingt zu deaktivieren.

+0

Python ist eine faszinierende und bizarre Sprache. – DeathByTensors

+3

Es ist eine Funktion namens [Kurzschlussauswertung] (https://en.wikipedia.org/wiki/Short-circuit_evaluation) und ist in vielen Sprachen wie JavaScript vorhanden. – 4castle

2
val = x or False 

Stellt sicher, dass val eigentlich 'False' ist (Typ 'Bool') anstelle von Falsey Werte wie 0 oder "".

Die zweite möglicherweise nur eine temporäre Deaktivierung für diese Bedingung?

Der beste Ort zum Untersuchen ist möglicherweise Versionsgeschichte?