Pythons `truthy` og `falsy`
Denne artikkelen forklarer Pythons truthy
og falsy
.
YouTube Video
Pythons truthy
og falsy
Definisjon av truthy
og falsy
I Python vurderes objekter i betingede uttrykk som enten 'True' eller 'False'. Truthy
refererer til objekter som evalueres som 'True', og falsy
til de som evalueres som 'False'. Disse evalueringene brukes ofte i betingede grener som if
-setninger eller while
-løkker. I tillegg tar bool()
-funksjonen et hvilket som helst objekt og returnerer dets boolske verdi.
Falsy
(Objekter evaluert som False)
I Python regnes følgende objekter som falsy
:.
-
False
-
None
-
Numeriske nullverdier
- Eksempel:
0
,0.0
- Eksempel:
-
Tom sekvenstype (slik som tomme lister, tupler eller strenger)
- Eksempel:
[]
,()
,""
- Eksempel:
-
Tom ordbok
- Eksempel:
{}
- Eksempel:
-
Tom mengde
- Eksempel:
set()
- Eksempel:
Disse objektene blir evaluert som 'falske' når de brukes i en betingelse for en if
-setning. For eksempel, kan du skrive kode som dette.
1if not []:
2 print("The list is falsy.")
- I denne koden er listen
[]
tom, så den blir evaluert somfalsk
, ogprint
-setningen blir utført.
Truthy
(Objekter evaluert som True)
Objekter som ikke regnes som falsy
, regnes som truthy
.
-
Ikke-null-tall (heltall, flyttall)
- Eksempler:
1
,3.14
,-100
- Eksempler:
-
Ikke-tomme sekvenstyper (lister, tupler, strenger, osv.)
- Eksempler:
[1, 2, 3]
,(1, 2)
,"Hello"
- Eksempler:
-
Ikke-tomme ordbøker
- Eksempel:
{"key": "value"}
- Eksempel:
-
Ikke-tomme mengder
- Eksempel:
{1, 2, 3}
- Eksempel:
Objekter som regnes som truthy
, vil evalueres som 'True' når de brukes i en if
-betingelse. For eksempel, kan du skrive kode som dette.
1if [1, 2, 3]:
2 print("The list is truthy.")
- I koden over, siden listen
[1, 2, 3]
ikke er tom, evalueres den somtruthy
ogprint
-setningen utføres.
Evaluering av boolske verdier med bool()
-funksjonen
Du kan evaluere objektets boolske verdi ved å bruke bool()
-funksjonen.
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")
- Denne koden demonstrerer hvordan sannhetsverdien til ulike verdier vurderes. For eksempel anses den numeriske verdien
0
og en tom streng somFalse
, mens et mellomrom eller strengen"0"
anses somTrue
.
Bruk av truthy
og falsy
Ved å bruke truthy
og falsy
kan koden skrives mer kortfattet og intuitivt. Spesielt kan if
-setninger ofte evalueres uten eksplisitte sammenligninger for å gjøre dem kortere. For eksempel oppfører de to følgende kodebitene seg likt, men den første er mer kortfattet.
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.")
I eksempelet ovenfor kan du se at my_list
blir evaluert som truthy
så lenge det ikke er en tom liste, noe som eliminerer behovet for eksplisitt sammenligning.
Design med truthy
og falsy
Ved å bruke konseptene truthy
og falsy
effektivt kan du forbedre lesbarheten og effektiviteten i koden. De er spesielt nyttige for å sette standardverdier, sjekke variabelgyldighet og validere inndata. For eksempel, hvis du forventer at None
eller en tom liste skal sendes som argumenter, kan du skrive kode som dette.
1def process_data(data=None):
2 data = data or []
3 print(data)
4
5process_data() # An empty list is used by default.
- I denne koden, hvis
data
erNone
, settes en tom liste[]
som standardverdi. På denne måten kan bruk avtruthy
ogfalsy
gjøre det enkelt å sette standardverdier.
Viktige punkter for å unngå utilsiktet oppførsel
Selv om kode som bruker truthy
og falsy
-verdier kan være kortfattet og praktisk, må du være klar over at det kan forårsake utilsiktet oppførsel. For eksempel, i denne koden blir ikke bare data
når det er None
, men også enhver verdi som evalueres som False
, slik som en tom streng eller 0
, erstattet med den tomme standardlisten []
. Av denne grunn, når det kreves en strengere betingelse, for eksempel å initialisere bare når verdien er None
, anbefales det å bruke en eksplisitt betingelse som value is None:
. Avhengig av situasjonen, er det viktig å designe med en balanse mellom korthet og grundighet i tankene.
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.
- I denne koden initialiseres
data
til en tom liste kun hvis den erNone
, mens andre falske verdier som0
forblir uendret.
Styring av boolske verdier i egendefinerte objekter
Selv i dine egne klasser kan du styre instansens boolske verdi ved å definere __bool__()
eller __len__()
.
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
- I denne koden gjør
__len__()
-metoden at containeren evalueres somFalse
når den er tom, og somTrue
når den har elementer.
Konklusjon
Konseptene truthy
og falsy
i Python er svært viktige for å skrive enkle betingelsesuttrykk og gjøre koden mer intuitiv. Å forstå og bruke dette riktig kan i stor grad forbedre lesbarheten og effektiviteten av koden.
Du kan følge med på artikkelen ovenfor ved å bruke Visual Studio Code på vår YouTube-kanal. Vennligst sjekk ut YouTube-kanalen.