Pythons `truthy` og `falsy`
Denne artikel forklarer Pythons truthy
og falsy
.
YouTube Video
Pythons truthy
og falsy
Definition af truthy
og falsy
I Python vurderes objekter i betingede udtryk enten som 'True' eller 'False'. Truthy
refererer til objekter, der vurderes som 'True', og falsy
refererer til dem, der vurderes som 'False'. Disse vurderinger bruges ofte i betingede grene som if
-udtryk eller while
-løkker. Derudover tager funktionen bool()
et vilkårligt objekt og returnerer dets booleske værdi.
Falsy
(Objekter vurderet som False)
I Python betragtes følgende objekter som falsy
:.
-
False
-
None
-
Numeriske nullværdier
- Eksempel:
0
,0.0
- Eksempel:
-
Tomme sekvenstyper (såsom tomme lister, tupler eller strenge)
- Eksempel:
[]
,()
,""
- Eksempel:
-
Tom ordbog
- Eksempel:
{}
- Eksempel:
-
Tomt sæt
- Eksempel:
set()
- Eksempel:
Disse objekter vurderes som 'falske', når de bruges i betingelsen for en if
-sætning. For eksempel kan du skrive kode som dette.
1if not []:
2 print("The list is falsy.")
- I denne kode er listen
[]
tom, så den vurderes somfalsk
, ogprint
-sætningen udføres.
Truthy
(Objekter vurderet som True)
Objekter, der ikke betragtes som falsy
, betragtes som truthy
.
-
Ikke-nul-tal (heltal, flydende tal)
- Eksempler:
1
,3.14
,-100
- Eksempler:
-
Ikke-tomme sekvenstyper (lister, tuples, strenge osv.)
- Eksempler:
[1, 2, 3]
,(1, 2)
,"Hello"
- Eksempler:
-
Ikke-tomme ordbøger
- Eksempel:
{"key": "value"}
- Eksempel:
-
Ikke-tomme mængder
- Eksempel:
{1, 2, 3}
- Eksempel:
Objekter, der anses for truthy
, vil blive vurderet som 'True', når de bruges i betingelsen i en if
-sætning. For eksempel kan du skrive kode som dette.
1if [1, 2, 3]:
2 print("The list is truthy.")
- I koden ovenfor, da listen
[1, 2, 3]
ikke er tom, vurderes den somtruthy
, ogprint
-sætningen udføres.
Vurdering af boolesk værdi med funktionen bool()
Du kan vurdere objekters booleske værdi ved at bruge funktionen 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")
- Denne kode demonstrerer, hvordan sandhedsværdien af forskellige værdier vurderes. For eksempel betragtes den numeriske værdi
0
og en tom streng somFalse
, mens et mellemrum eller strengen"0"
betragtes somTrue
.
Brug af truthy
og falsy
Ved at bruge truthy
og falsy
kan kode skrives mere kortfattet og intuitivt. Især kan if
-sætninger ofte vurderes uden eksplicitte sammenligninger for at gøre dem kortere. For eksempel opfører de følgende to kodeeksempler sig ens, men det første er mere 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 eksemplet ovenfor kan du se, at my_list
vurderes som truthy
, så længe det ikke er en tom liste, hvilket eliminerer behovet for en eksplicit sammenligning.
Design med truthy
og falsy
Ved effektivt at udnytte konceptet truthy
og falsy
kan du forbedre kodens læsbarhed og effektivitet. De er særligt nyttige til at indstille standardværdier, kontrollere variabel gyldighed og inputvalidering. For eksempel, hvis du forventer, at None
eller en tom liste bliver givet 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 kode, hvis
data
erNone
, sættes en tom liste[]
som standardværdi. På denne måde gør brugen aftruthy
ogfalsy
det muligt at angive standardværdier på en kortfattet måde.
Punkter at være opmærksom på for at undgå utilsigtet adfærd
Dog kan kode, der bruger truthy
og falsy
værdier, være kortfattet og praktisk, men vær opmærksom på, at det kan medføre utilsigtet adfærd. For eksempel, i denne kode, ikke kun når data
er None
, men også når det er en værdi, der vurderes som False
, såsom en tom streng eller 0
, vil den blive erstattet med den tomme standardliste []
. Af denne grund, når en strengere betingelse er påkrævet, såsom kun at initialisere når værdien er None
, anbefales det at bruge en eksplicit betingelse som value is None:
. Afhængigt af situationen er det vigtigt at designe med en balance mellem kortfattethed og stringens for øje.
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 kode initialiseres
data
kun til en tom liste, hvis den erNone
, mens andre falske værdier som0
forbliver uændrede.
Kontrol af boolesk værdi i brugerdefinerede objekter
Selv i dine egne klasser kan du styre en instans' booleske værdi ved at 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 kode gør
__len__()
-metoden, at containeren evalueres somFalse
, når den er tom, og somTrue
, når den har elementer.
Konklusion
Konceptet med truthy
og falsy
i Python er meget vigtigt for at skrive kortfattede betingede udtryk og gøre koden mere intuitiv. At forstå og bruge disse korrekt kan i høj grad forbedre kodens læsbarhed og effektivitet.
Du kan følge med i ovenstående artikel ved hjælp af Visual Studio Code på vores YouTube-kanal. Husk også at tjekke YouTube-kanalen.