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
- Voorbeeld:
-
Lege sequentietypen (zoals lege lijsten, tuples of strings)
- Voorbeeld:
[]
,()
,""
- Voorbeeld:
-
Lege woordenlijst
- Voorbeeld:
{}
- Voorbeeld:
-
Lege set
- Voorbeeld:
set()
- Voorbeeld:
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 alsvals
, en wordt deprint
-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
- Voorbeelden:
-
Niet-lege sequentietypen (lijsten, tuples, strings, etc.)
- Voorbeelden:
[1, 2, 3]
,(1, 2)
,"Hello"
- Voorbeelden:
-
Niet-lege dictionaries
- Voorbeeld:
{"key": "value"}
- Voorbeeld:
-
Niet-lege sets
- Voorbeeld:
{1, 2, 3}
- Voorbeeld:
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 deprint
-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 alsFalse
beschouwd, terwijl een spatie of de string"0"
alsTrue
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 mettruthy
enfalsy
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 hetNone
is, terwijl andere onwaarachtige waarden zoals0
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 alsFalse
wordt geëvalueerd wanneer deze leeg is, en alsTrue
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.