Python: False or None vs. None or False

In [20]: print None or False
-------> print(None or False)
False

In [21]: print False or None
-------> print(False or None)
None
To zachowanie mnie myli. Czy ktoś mógłby mi wyjaśnić, dlaczego to się dzieje w ten sposób? Spodziewałam się, że oboje zachowają się tak samo.
Author: Virgiliu, 2010-10-12

6 answers

Wyrażenie x or y jest ewaluowane na x Jeśli x jest prawdziwe, lub y Jeśli x jest fałszywe.

Zauważ, że "prawda" i "fałsz" w powyższym zdaniu mówią o "prawdziwości", a nie o stałych wartościach True i False. Coś, co jest "prawdziwe "sprawia, że stwierdzenie if odnosi sukces; coś, co jest" fałszywe " sprawia, że zawodzi. wartości" false " obejmują False, None, 0 i [] (pusta lista).

 64
Author: RichieHindle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-12 12:33:58

Operator" or "zwraca wartość swojego pierwszego operandu, jeśli ta wartość jest prawdziwa w pythonicznym sensie logicznym (aka jego "prawdziwość"), w przeciwnym razie zwraca wartość swojego drugiego operandu, cokolwiek się stanie. Patrz podrozdział zatytułowany operacje logiczne w sekcji dotyczącej wyrażeń w bieżącej dokumentacji online.

W obu przykładach pierwszy operand jest uważany za fałszywy, więc wartość drugi staje się wynikiem oceny wyrażenia.

 8
Author: martineau,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-23 15:29:53

Temat ściśle związany z Pythonem or i and zwarcie . W operacji logicznej or, Jeśli jakikolwiek argument jest prawdziwy, to cała sprawa będzie prawdziwa i nic więcej nie musi być oceniane; Python natychmiast zwraca tę wartość "true". Jeśli zakończy się i nic nie było prawdą, zwróci ostatni argument, który obsługiwał, który będzie wartością "false".

and jest odwrotnie, jeśli zobaczy jakieś fałszywe wartości, natychmiast zakończy się z tą "fałszywą" wartością, lub jeśli przejdzie to wszystko, zwraca ostateczną wartość "true".

>>> 1 or 2 # first value TRUE, second value doesn't matter
1
>>> 1 and 2 # first value TRUE, second value might matter
2
>>> 0 or 0.0 # first value FALSE, second value might matter
0.0
>>> 0 and 0.0 # first value FALSE, second value doesn't matter
0
 4
Author: Nick T,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-12 13:57:37

Musisz zdać sobie sprawę, że None, False i True są singletonami.

Na przykład, if foo is not None oznacza, że foo ma inną wartość niż None. Działa to tak samo jak posiadanie if foo, które jest w zasadzie if foo == True.

Więc, not None i True działają w ten sam sposób. Również None i False działają w ten sam sposób.

>>> foo = not None
>>> bool(foo)
True
>>> foo = 5  # Giving an arbitrary value here
>>> bool(foo)
True

>>> foo = None
>>> bool(foo)
False
>>> foo = 5  # Giving an arbitrary value here
>>> bool(foo)
True

Ważną rzeczą do uświadomienia sobie i bycia świadomym podczas kodowania jest to, że porównując dwie rzeczy, None potrzebuje is, Ale True i False potrzebują ==. Avoid if foo == None i robić tylko if foo is None i unikać if foo != None i robić tylko if foo is not None. W przypadku if foo is not None po prostu zrób if foo. W przypadku if foo is None, po prostu zrób if not foo.

Uwaga: True jest w zasadzie 1 i False jest w zasadzie 0. W dawnych czasach Pythona mieliśmy tylko 1 dla wartości true i mieliśmy 0 Dla wartości false. Jest bardziej zrozumiałe i przyjazne dla człowieka, aby powiedzieć True zamiast 1 i bardziej zrozumiałe i przyjazne dla człowieka, aby powiedzieć False zamiast 0.

 2
Author: Boštjan Mejak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-20 22:31:50

Z booleanowego punktu widzenia oba zachowują się tak samo, oba zwracają wartość, która zostanie obliczona na false.

or po prostu "wykorzystuje" wartości, które jest podane, zwracając lewą, jeśli była to prawda, a prawą w przeciwnym razie.

 1
Author: sth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-12 12:33:07
Condition1 or Condition2

Jeśli warunek 1 jest False, to evalute I return Condition2. None evalutes to False.

 0
Author: Andrey Gubarev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-12 12:33:49