Pythons `truthy` und `falsy`

Pythons `truthy` und `falsy`

Dieser Artikel erklärt Pythons truthy und falsy.

YouTube Video

Pythons truthy und falsy

Definition von truthy und falsy

In Python werden Objekte, die in bedingten Ausdrücken ausgewertet werden, entweder als 'True' oder 'False' betrachtet. Truthy bezieht sich auf Objekte, die als 'True' ausgewertet werden, und falsy auf diejenigen, die als 'False' ausgewertet werden. Diese Bewertungen werden häufig in bedingten Zweigen wie if-Anweisungen oder while-Schleifen verwendet. Außerdem nimmt die Funktion bool() beliebige Objekte und gibt deren Boolean-Wert zurück.

Falsy (Objekte, die als False ausgewertet werden)

In Python werden die folgenden Objekte als falsy betrachtet:.

  • Falsch

  • Nichts

  • Numerische Nullwerte

    • Beispiel: 0, 0.0
  • Leere Sequenztypen (wie leere Listen, Tupel oder Zeichenketten)

    • Beispiel: [], (), ""
  • Leeres Wörterbuch

    • Beispiel: {}
  • Leere Menge

    • Beispiel: set()

Diese Objekte werden als 'falsy' ausgewertet, wenn sie in der Bedingung einer if-Anweisung verwendet werden. Zum Beispiel können Sie solchen Code schreiben.

1if not []:
2    print("The list is falsy.")
  • In diesem Code ist die Liste [] leer, daher wird sie als falsy ausgewertet und die print-Anweisung wird ausgeführt.

Truthy (Objekte, die als True ausgewertet werden)

Objekte, die nicht als falsy angesehen werden, gelten als truthy.

  • Von null verschiedene Zahlen (Ganzzahlen, Gleitkommazahlen)

    • Beispiele: 1, 3.14, -100
  • Nicht-leere Sequenztypen (Listen, Tupel, Zeichenketten usw.)

    • Beispiele: [1, 2, 3], (1, 2), "Hallo"
  • Nicht-leere Dictionaries

    • Beispiel: {"key": "value"}
  • Nicht-leere Mengen

    • Beispiel: {1, 2, 3}

Objekte, die als truthy gelten, werden in der Bedingung einer if-Anweisung als 'True' ausgewertet. Zum Beispiel können Sie solchen Code schreiben.

1if [1, 2, 3]:
2    print("The list is truthy.")
  • Im obigen Code wird die Liste [1, 2, 3], da sie nicht leer ist, als truthy ausgewertet und die print-Anweisung ausgeführt.

Auswertung des Boolean-Werts mit der Funktion bool()

Sie können den Boolean-Wert von Objekten mit der Funktion bool() auswerten.

 1# Examples of falsy values
 2print("False is", "truthy" if bool(False) else "falsy")
 3print("0 is", "truthy" if bool(0) else "falsy")
 4print('"" is', "truthy" if bool("") else "falsy")
 5print("None is", "truthy" if bool(None) else "falsy")
 6print("[] is", "truthy" if bool([]) else "falsy")
 7
 8# Examples of truthy values
 9print("1 is", "truthy" if bool(1) else "falsy")
10print('"hello" is', "truthy" if bool("hello") else "falsy")
11print('" " (space) is', "truthy" if bool(" ") else "falsy")
12print('"0" is', "truthy" if bool("0") else "falsy")
  • Dieser Code zeigt, wie der Wahrheitswert verschiedener Werte bewertet wird. Zum Beispiel werden der Zahlenwert 0 und ein leerer String als False angesehen, während ein Leerzeichen oder der String "0" als True gelten.

Verwendung von truthy und falsy

Durch die Verwendung von truthy und falsy kann Code prägnanter und intuitiver geschrieben werden. Insbesondere können if-Anweisungen oft ohne explizite Vergleiche ausgewertet werden, um sie kürzer zu machen. Zum Beispiel verhalten sich die folgenden beiden Codes ähnlich, aber der erste ist kürzer.

1my_list = [1]
2
3# Explicit comparison
4if my_list != []:
5    print("The list is not empty.")
6
7# Using truthy/falsy
8if my_list:
9    print("The list is not empty.")

Im obigen Beispiel sehen Sie, dass my_list als truthy ausgewertet wird, solange es keine leere Liste ist, wodurch ein expliziter Vergleich überflüssig wird.

Arbeiten mit truthy und falsy

Durch die effektive Nutzung der Konzepte truthy und falsy können Sie die Lesbarkeit und Effizienz des Codes verbessern. Sie sind besonders nützlich zum Festlegen von Standardwerten, zum Überprüfen der Variablen-Gültigkeit und zur Eingabevalidierung. Zum Beispiel, wenn Sie erwarten, dass None oder eine leere Liste als Argumente übergeben werden, können Sie solchen Code schreiben.

1def process_data(data=None):
2    data = data or []
3    print(data)
4
5process_data()  # An empty list is used by default.
  • In diesem Code wird, wenn data None ist, eine leere Liste [] als Standardwert gesetzt. Auf diese Weise können Sie mit truthy und falsy Standardwerte prägnant festlegen.

Zu beachtende Punkte zur Vermeidung unerwünschten Verhaltens

Allerdings kann Code, der truthy- und falsy-Werte verwendet, zwar knapp und bequem sein, aber es besteht die Gefahr unerwünschten Verhaltens. Zum Beispiel wird in diesem Code nicht nur dann, wenn data None ist, sondern auch bei jedem als False gewerteten Wert (wie einem leeren String oder 0), der Standardwert [] übernommen. Aus diesem Grund empfiehlt es sich, wann immer eine strengere Bedingung erforderlich ist – wie etwa nur bei None zu initialisieren – eine explizite Bedingung wie value is None: zu verwenden. Je nach Situation ist es wichtig, beim Entwurf eine Balance zwischen Prägnanz und Strenge zu bewahren.

1def process_data(data=None):
2    if data is None:
3        data = []
4    print(data)
5
6process_data()   # An empty list is used by default.
7process_data(0)  # 0 is printed because it's not None.
  • In diesem Code wird data nur dann mit einer leeren Liste initialisiert, wenn es None ist, während andere als falsch bewertete Werte wie 0 unverändert bleiben.

Steuerung des Boolean-Werts in benutzerdefinierten Objekten

Auch in eigenen Klassen können Sie den Boolean-Wert einer Instanz durch die Definition von __bool__() oder __len__() steuern.

 1class MyContainer:
 2    def __init__(self, items):
 3        self.items = items
 4
 5    def __len__(self):
 6        return len(self.items)
 7
 8box = MyContainer([])
 9print(bool(box))  # False
10
11box.items.append("item")
12print(bool(box))  # True
  • In diesem Code bewirkt die Methode __len__(), dass der Container als False ausgewertet wird, wenn er leer ist, und als True, wenn er Elemente enthält.

Fazit

Die Konzepte von truthy und falsy in Python sind sehr wichtig, um prägnante Bedingungsausdrücke zu schreiben und den Code intuitiver zu gestalten. Das Verstehen und der richtige Einsatz dieser Konzepte können die Lesbarkeit und Effizienz des Codes erheblich verbessern.

Sie können den obigen Artikel mit Visual Studio Code auf unserem YouTube-Kanal verfolgen. Bitte schauen Sie sich auch den YouTube-Kanal an.

YouTube Video