Dit gedrag brengt me in de war. Kan iemand mij uitleggen waarom dit zo gebeurt? Ik verwachtte dat ze zich allebei hetzelfde zouden gedragen.
Antwoord 1, autoriteit 100%
De uitdrukking x or y
resulteert in x
als x
waar is, of y
als x
is onwaar.
Merk op dat “true” en “false” in de bovenstaande zin spreken over “truthiness”, niet de vaste waarden True
en False
. Iets dat “waar” is, zorgt ervoor dat een if
-statement slaagt; iets dat “vals” is, laat het mislukken. “false” waarden omvatten False
, None
, 0
en []
(een lege lijst).
Antwoord 2, autoriteit 14%
De operator or
retourneert de waardevan zijn eerste operand, als die waarde waar is in de Pythonische booleaanse betekenis (ook bekend als de “waarheid”), anders retourneert het de waardevan zijn tweede operand, wat het ook mag zijn. Zie de subsectie met de titel Boolean operationsin de sectie over Expressiesin de huidige online documentatie.
In beide voorbeelden wordt de eerste operand als onwaar beschouwd, dus de waarde van de tweede wordt het resultaat van het evalueren van de uitdrukking.
Antwoord 3, autoriteit 9%
UITLEG
Je moet je realiseren dat None
, False
en True
allemaal singletons zijn.
Bijvoorbeeld, if foo is not None
betekent dat foo
een andere waarde heeft dan None
. Dit werkt hetzelfde als gewoon if foo
hebben, wat in feite if foo == True
is.
Dus not None
en True
werken op dezelfde manier, evenals None
en False
.
>>> 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
Het belangrijkste om te beseffen en te beseffen bij het coderen is dat bij het vergelijken van twee dingen, None
is
nodig heeft, maar True
en False
==
nodig. Vermijd if foo == None
en doe alleen if foo is None
is. Vermijd ook if foo != None
en doe alleen if foo is not None
.
WAARSCHUWING
Als je if foo
of if not foo
gebruikt, pas dan op voor mogelijke bugs. Gebruik dat dus helemaal niet en blijf aan de veilige kant. Het is erg belangrijkom de best practices van Python-experts te volgen.
HERINNERING
True
is een 1
en False
is een 0
.
In de oude dagen van Python hadden we alleen een geheel getal 1
om een waarheidswaarde te vertegenwoordigen, en we hadden een geheel getal 0
om een valse waarde voor te stellen. Het is echter begrijpelijker en mensvriendelijker om True
te zeggen in plaats van 1
, en begrijpelijker en mensvriendelijker om False
te zeggen in plaats van 0
.
Antwoord 4, autoriteit 5%
Een nauw verwant onderwerp: Python’s or
en and
kortsluiting. In een logische or
operatie, als een argument waar is, dan zal het hele ding waar zijn en hoeft niets anders te worden geëvalueerd; Python retourneert onmiddellijk die “true” waarde. Als het klaar is en niets waar was, retourneert het het laatste argument dat het heeft afgehandeld, wat een “false” waarde zal zijn.
and
is het tegenovergestelde, als het valse waarden ziet, zal het onmiddellijk afsluiten met die “false” waarde, of als het alles doorstaat, retourneert het de laatste “true” waarde.
>>> 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
Antwoord 5, autoriteit 2%
Vanuit een booleaans oogpunt gedragen ze zich allebei hetzelfde, beide retourneren een waarde die evalueert naar onwaar.
or
“hergebruikt” gewoon de gegeven waarden, waarbij de linker wordt geretourneerd als dat waar was en de rechter anders.
Antwoord 6
Condition1 or Condition2
Als Voorwaarde1 Onwaar is, evalueer dan en retourneer Voorwaarde2.
Geen evalueert naar Onwaar.