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
0og 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
dataerNone, sættes en tom liste[]som standardværdi. På denne måde gør brugen aftruthyogfalsydet 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
datakun til en tom liste, hvis den erNone, mens andre falske værdier som0forbliver 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.