Python? (bedingter/ternärer) Operator für Zuweisungen [duplicate]

Lesezeit: 3 Minuten

Wills Benutzeravatar
Werden

C und viele andere Sprachen haben a bedingt (AKA ternär) Operator. Auf diese Weise können Sie basierend auf der Wahrheit einer Bedingung sehr knapp zwischen zwei Werten wählen, wodurch Ausdrücke, einschließlich Zuweisungen, sehr prägnant werden.

Ich vermisse das, weil ich finde, dass mein Code viele bedingte Zuweisungen hat, die in Python vier Zeilen einnehmen:

if condition:
    var = something
else:
    var = something_else

Während in C es wäre:

var = condition ? something : something_else;

Ein- oder zweimal in einer Datei ist in Ordnung, aber wenn Sie viele bedingte Zuweisungen haben, explodiert die Anzahl der Zeilen, und am schlimmsten wird das Auge von ihnen angezogen.

Ich mag die Knappheit des Bedingungsoperators, weil er verhindert, dass Dinge, die ich für unstrategisch halte, mich beim Überfliegen des Codes ablenken.

Gibt es also in Python einen Trick, mit dem Sie die Zuweisung auf eine einzelne Zeile bringen können, um die Vorteile des Bedingungsoperators, wie ich sie skizziert habe, anzunähern?

carls Benutzeravatar
Karl

Python hat einen solchen Operator:

variable = something if condition else something_else

Alternativ, obwohl nicht empfohlen (siehe Kommentar von Karadoc):

variable = (condition and something) or something_else

  • Das “Variable = Bedingung und etwas oder etwas anderes” funktioniert nicht einmal. Beispielsweise gibt “True and False or True” True zurück, während “True ? False : True” False zurückgeben würde.

    – karadok

    17. Mai 2012 um 10:27 Uhr


  • Etwas oder etwas_anderes funktioniert gut, oder? Wenn zum Beispiel etwas null wäre, würden Sie es auf etwas anderes setzen?

    – Zügig

    14. Mai 2013 um 13:01 Uhr

  • @karadoc richtiger Punkt, aber schlechtes Beispiel & keine Erklärung für das zweite Beispiel: für Anfänger: wenn “etwas” als leer/falsch betrachtet wird => wird ausgewertet False => so wirst du Nie bekommen Werte wie 0 (int null), ""(leerer String), [] leeres Array, Falseund andere “leere” Werte => weil sie zu bewerten False => True and False ist False 🙂 Einige Sprachen sogar berücksichtigen "0" (Null als String) als leerer Wert 🙂

    – jave.web

    1. März 2020 um 21:18 Uhr


  • Wenn something ist ein Ausdruck, wird er faul ausgewertet?

    – trebor

    4. August 2021 um 19:54 Uhr

  • count+=1 if condition else count -= 1 ist es möglich

    – Azhar Uddin Scheich

    1. Februar um 18:31 Uhr


Benutzeravatar von Greg Hewgill
Greg Hewgill

In älterem Python-Code sehen Sie möglicherweise den Trick:

condition and something or something_else

Dies wurde jedoch durch die weit überlegene ersetzt ... if ... else ... konstruieren:

something if condition else something_else

  • warum funktioniert “Zurückgeben, wenn nicht was auch immer” aber nicht?

    – Werden

    22. Juni 2010 um 8:21 Uhr

  • @Will: Weil “Rückgabe, wenn nicht was auch immer” nicht syntaktisch korrektes Python ist?

    – Greg Hewgill

    22. Juni 2010 um 8:36 Uhr

  • @Will Wahrscheinlich, weil Sie keine angeben else Teil?

    – glglgl

    29. Juli 2014 um 19:07 Uhr

  • Du kannst return 1 if not cond else 2 da das den Ausdruck zurückgibt 1 if not cond else 2. Aber man kann nicht einfach verwenden return if not cond (sogar mit else) seit if...else ist ein Ausdruck: Es wird zu einem Wert ausgewertet. Sie verwenden möchten if wie Kontrollfluss was anders ist. Aber if not cond: return ist in Ordnung.

    – Andreas Jaffe

    30. Juli 2014 um 9:01 Uhr


1423880cookie-checkPython? (bedingter/ternärer) Operator für Zuweisungen [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy