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. 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).
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.
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
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
.
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.
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.
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