Python's `truthy` en `falsy`

Python's `truthy` en `falsy`

Dit artikel legt Python's truthy en falsy uit.

YouTube Video

Python's truthy en falsy

Definitie van truthy en falsy

In Python worden objecten die in conditionele expressies worden geëvalueerd als 'True' of 'False' beschouwd. Truthy verwijst naar objecten die als 'True' worden geëvalueerd en falsy verwijst naar objecten die als 'False' worden geëvalueerd. Deze evaluaties worden vaak gebruikt in conditionele takken zoals if-statements of while-lussen. De functie bool() accepteert elk object en geeft de Booleaanse waarde ervan terug.

Falsy (Objecten die als False worden geëvalueerd)

In Python worden de volgende objecten als 'falsy' beschouwd:.

  • Onwaar

  • Geen

  • Numerieke nulwaarden

    • Voorbeeld: 0, 0.0
  • Lege sequentietypen (zoals lege lijsten, tuples of strings)

    • Voorbeeld: [], (), ""
  • Lege woordenlijst

    • Voorbeeld: {}
  • Lege set

    • Voorbeeld: set()

Deze objecten worden geëvalueerd als 'vals' wanneer ze worden gebruikt in de conditie van een if-statement. Bijvoorbeeld, je kunt code schrijven zoals deze.

1if not []:
2    print("The list is falsy.")
  • In deze code is de lijst [] leeg, dus wordt deze geëvalueerd als vals, en wordt de print-statement uitgevoerd.

Truthy (Objecten die als True worden geëvalueerd)

Objecten die niet als 'falsy' worden beschouwd, worden als 'truthy' gezien.

  • Niet-nul getallen (helen, kommagetallen)

    • Voorbeelden: 1, 3.14, -100
  • Niet-lege sequentietypen (lijsten, tuples, strings, etc.)

    • Voorbeelden: [1, 2, 3], (1, 2), "Hello"
  • Niet-lege dictionaries

    • Voorbeeld: {"key": "value"}
  • Niet-lege sets

    • Voorbeeld: {1, 2, 3}

Objecten die als 'truthy' gelden, worden als 'True' geëvalueerd wanneer ze in de conditie van een if-statement worden gebruikt. Bijvoorbeeld, je kunt code schrijven zoals deze.

1if [1, 2, 3]:
2    print("The list is truthy.")
  • In de bovenstaande code wordt de lijst [1, 2, 3] als 'truthy' geëvalueerd omdat ze niet leeg is, en wordt de print-opdracht uitgevoerd.

Booleaanse waarde bepalen met de functie bool()

U kunt de Booleaanse waarde van objecten bepalen met behulp van de functie bool().

 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")
  • Deze code laat zien hoe de waarheidswaarde van verschillende waarden wordt geëvalueerd. Zo worden bijvoorbeeld de numerieke waarde 0 en een lege string als False beschouwd, terwijl een spatie of de string "0" als True worden beschouwd.

Truthy en falsy gebruiken

Door gebruik te maken van truthy en falsy, kan code korter en intuïtiever worden geschreven. Met name kunnen if-statements vaak worden geëvalueerd zonder expliciete vergelijkingen om ze korter te maken. De volgende twee codevoorbeelden gedragen zich bijvoorbeeld vergelijkbaar, maar de eerste is beknopter.

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

In het bovenstaande voorbeeld zie je dat my_list wordt geëvalueerd als truthy, zolang het geen lege lijst is, waardoor expliciete vergelijking overbodig is.

Ontwerpen met truthy en falsy

Door de concepten truthy en falsy effectief te gebruiken, kun je de leesbaarheid en efficiëntie van code verbeteren. Ze zijn vooral handig voor het instellen van standaardwaarden, het controleren van de geldigheid van variabelen en inputvalidatie. Bijvoorbeeld, als je verwacht dat Geen of een lege lijst als argumenten worden doorgegeven, kun je code schrijven zoals deze.

1def process_data(data=None):
2    data = data or []
3    print(data)
4
5process_data()  # An empty list is used by default.
  • In deze code wordt, als data None is, een lege lijst [] als standaardwaarde ingesteld. Op deze manier kun je met truthy en falsy op een beknopte manier standaardwaarden instellen.

Aandachtspunten om ongewenst gedrag te voorkomen

Hoewel code die gebruikmaakt van 'truthy' en 'falsy' waarden kort en handig kan zijn, moet u zich ervan bewust zijn dat dit tot ongewenst gedrag kan leiden. In deze code wordt, niet alleen wanneer data None is, maar ook wanneer het elke waarde heeft die als False wordt geëvalueerd (zoals een lege string of 0), deze vervangen door de standaard lege lijst []. Om die reden wordt aanbevolen om een expliciete conditie te gebruiken, zoals value is None:, als een strengere voorwaarde vereist is, bijvoorbeeld bij initialiseren alleen wanneer de waarde None is. Afhankelijk van de situatie is het belangrijk om het ontwerp zorgvuldig af te stemmen op de juiste balans tussen beknoptheid en nauwkeurigheid.

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 deze code wordt data alleen geïnitialiseerd als een lege lijst als het None is, terwijl andere onwaarachtige waarden zoals 0 onveranderd blijven.

Booleaanse waarde bepalen in aangepaste objecten

Ook in uw eigen klassen kunt u de Booleaanse waarde van een instantie bepalen door __bool__() of __len__() te definiëren.

 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 deze code zorgt de __len__()-methode ervoor dat de container als False wordt geëvalueerd wanneer deze leeg is, en als True wanneer er elementen in zitten.

Conclusie

De concepten truthy en falsy in Python zijn erg belangrijk voor het schrijven van beknopte voorwaardelijke expressies en om de code intuïtiever te maken. Het begrijpen en correct gebruiken hiervan kan de leesbaarheid en efficiëntie van de code aanzienlijk verbeteren.

Je kunt het bovenstaande artikel volgen met Visual Studio Code op ons YouTube-kanaal. Bekijk ook het YouTube-kanaal.

YouTube Video