Pythons `truthy` och `falsy`
Den här artikeln förklarar Pythons truthy
och falsy
.
YouTube Video
Pythons truthy
och falsy
Definition av truthy
och falsy
I Python bedöms objekt i villkorsuttryck som antingen 'True' eller 'False'. Truthy
hänvisar till objekt som bedöms som 'True', och falsy
hänvisar till objekt som bedöms som 'False'. Dessa utvärderingar används ofta i villkorsgrenar som if
-satser eller while
-loopar. Dessutom tar bool()
-funktionen vilket objekt som helst och returnerar dess booleska värde.
Falsy
(Objekt som bedöms som False)
I Python anses följande objekt vara falsy
:.
-
Falsk
-
Ingen
-
Numeriska nollvärden
- Exempel:
0
,0.0
- Exempel:
-
Tomma sekvenstyper (som tomma listor, tupler eller strängar)
- Exempel:
[]
,()
,""
- Exempel:
-
Tom ordbok
- Exempel:
{}
- Exempel:
-
Tom mängd
- Exempel:
set()
- Exempel:
Dessa objekt utvärderas som 'falsy' när de används i villkoret för ett if
-uttryck. Till exempel kan du skriva kod som denna.
1if not []:
2 print("The list is falsy.")
- I den här koden är listan
[]
tom, så den utvärderas somfalsy
, ochprint
-uttrycket körs.
Truthy
(Objekt som bedöms som True)
Objekt som inte anses vara falsy
betraktas som truthy
.
-
Icke-nollskilda tal (heltal, flyttal)
- Exempel:
1
,3.14
,-100
- Exempel:
-
Icke-tomma sekvenstyper (listor, tupler, strängar, etc.)
- Exempel:
[1, 2, 3]
,(1, 2)
,"Hello"
- Exempel:
-
Icke-tomma ordböcker
- Exempel:
{"key": "value"}
- Exempel:
-
Icke-tomma mängder
- Exempel:
{1, 2, 3}
- Exempel:
Objekt som anses som truthy
kommer att utvärderas som 'True' när de används i villkoret för ett if
-uttryck. Till exempel kan du skriva kod som denna.
1if [1, 2, 3]:
2 print("The list is truthy.")
- I koden ovan, eftersom listan
[1, 2, 3]
inte är tom, utvärderas den somtruthy
ochprint
-uttrycket utförs.
Utvärdera booleskt värde med bool()
-funktionen
Du kan utvärdera objektens booleska värde genom att använda bool()
-funktionen.
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")
- Den här koden visar hur sanningsvärdet för olika värden utvärderas. Till exempel betraktas det numeriska värdet
0
och en tom sträng somFalse
, medan ett mellanslag eller strängen"0"
betraktas somTrue
.
Användning av truthy
och falsy
Genom att använda truthy
och falsy
kan kod skrivas mer kortfattat och intuitivt. I synnerhet kan if
-uttryck ofta utvärderas utan explicita jämförelser för att göra dem kortare. Till exempel fungerar följande två kodexempel på liknande sätt, men det första är mer kortfattat.
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 exemplet ovan kan du se att my_list
utvärderas som truthy
så länge det inte är en tom lista, vilket eliminerar behovet av en explicit jämförelse.
Designa med truthy
och falsy
Genom att effektivt använda koncepten truthy
och falsy
kan du förbättra kodläsbarhet och effektivitet. De är särskilt användbara för att ange standardvärden, kontrollera variabels giltighet och validera indata. Till exempel, om du förväntar dig att Ingen
eller en tom lista skickas som argument, kan du skriva kod som denna.
1def process_data(data=None):
2 data = data or []
3 print(data)
4
5process_data() # An empty list is used by default.
- I denna kod, om
data
ärNone
, sätts en tom lista[]
som standardvärde. På detta sätt gör användningen avtruthy
ochfalsy
det möjligt att sätta standardvärden på ett kortfattat sätt.
Viktiga punkter att notera för att undvika oönskat beteende
Dock kan kod som använder truthy
och falsy
värden vara koncis och bekväm, men man bör vara medveten om att det kan orsaka oönskat beteende. Till exempel, i denna kod, inte bara när data
är None
, utan också när det är ett värde som utvärderas som False
, såsom en tom sträng eller 0
, kommer det att ersättas med en tom lista []
som standardvärde. Av denna anledning, när ett striktare villkor krävs, såsom att initiera endast när värdet är None
, rekommenderas det att använda ett explicit villkor som value is None:
. Beroende på situationen är det viktigt att utforma med en balans mellan kortfattad kod och noggrannhet i åtanke.
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 den här koden initialiseras
data
till en tom lista endast om det ärNone
, medan andra falska värden som0
lämnas oförändrade.
Kontrollera booleskt värde i egna objekt
Även i egna klasser kan du kontrollera instansens booleska värde genom att definiera __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 denna kod gör
__len__()
-metoden att behållaren utvärderas somFalse
när den är tom, och somTrue
när den har element.
Slutsats
Koncepten truthy
och falsy
i Python är mycket viktiga för att skriva kortfattade villkorsuttryck och göra koden mer intuitiv. Att förstå och använda dessa på rätt sätt kan avsevärt förbättra kodens läsbarhet och effektivitet.
Du kan följa med i artikeln ovan med hjälp av Visual Studio Code på vår YouTube-kanal. Vänligen kolla även in YouTube-kanalen.