Onwaar of Geen vs. Geen of Onwaar

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 yresulteert in xals xwaar is, of yals xis onwaar.

Merk op dat “true” en “false” in de bovenstaande zin spreken over “truthiness”, niet de vaste waarden Trueen False. Iets dat “waar” is, zorgt ervoor dat een if-statement slaagt; iets dat “vals” is, laat het mislukken. “false” waarden omvatten False, None, 0en [](een lege lijst).


Antwoord 2, autoriteit 14%

De operator orretourneert 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, Falseen Trueallemaal singletons zijn.

Bijvoorbeeld, if foo is not Nonebetekent dat fooeen andere waarde heeft dan None. Dit werkt hetzelfde als gewoon if foohebben, wat in feite if foo == Trueis.

Dus not Noneen Truewerken op dezelfde manier, evenals Noneen 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, Noneisnodig heeft, maar Trueen False==nodig. Vermijd if foo == Noneen doe alleen if foo is Noneis. Vermijd ook if foo != Noneen doe alleen if foo is not None.

WAARSCHUWING

Als je if fooof if not foogebruikt, 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

Trueis een 1en Falseis een 0.

In de oude dagen van Python hadden we alleen een geheel getal 1om een ​​waarheidswaarde te vertegenwoordigen, en we hadden een geheel getal 0om een ​​valse waarde voor te stellen. Het is echter begrijpelijker en mensvriendelijker om Truete zeggen in plaats van 1, en begrijpelijker en mensvriendelijker om Falsete zeggen in plaats van 0.


Antwoord 4, autoriteit 5%

Een nauw verwant onderwerp: Python’s oren andkortsluiting. In een logische oroperatie, 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.

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

Other episodes