Sandhed og falske værdier i Python: En detaljeret introduktion

Velkommen

I denne artikel lærer du:

  • Hvilke sandfærdige og falske værdier er.
  • Hvad gør en værdi sand eller falsk.
  • Sådan bruges bool()funktionen til at afgøre, om en værdi er sand eller falsk.
  • Hvordan man laver objekter fra brugerdefinerede klasser sandt eller falske ved hjælp af den specielle metode __bool __.

Lad os begynde! ✨

? Sandhedsværdier versus sandhed og falske værdier

Lad mig introducere dig til disse begreber ved at sammenligne dem med de værdier, Trueog Falsesom vi typisk arbejder med.

Udtryk med operander og operatører evalueres til enten Trueeller, Falseog de kan bruges i en ifeller whiletilstand til at bestemme, om en kodeblok skal køre.

Her har vi et eksempel:

# Expression 5 >> if 5 < 3: print("True") else: print("False") # Output False

I dette eksempel fungerer alt som forventet, fordi vi brugte et udtryk med to operander og en operator 5 < 3.

Men hvad tror du vil ske, hvis vi prøver at køre denne kode?

>>> a = 5 >>> if a: print(a)

Bemærk, at vi nu ikke har et typisk udtryk ud for ifnøgleordet, kun en variabel:

Overraskende nok er output:

5

Hvis vi ændrer værdien atil nul, som denne:

>>> a = 0 >>> if a: print(a)

Der er ingen output.

Jeg er sikker på, at du skal spørge dette lige nu: hvad fik koden til at køre med succes?

Variablen aer ikke et typisk udtryk. Det har ikke operatører og operander, så hvorfor evaluerede det til Trueeller Falseafhængigt af dets værdi?

Svaret ligger på begrebet sandhed og falske værdier, som ikke selv er sandhedsværdier, men de vurderes til enten Trueeller False.

? Sandhed og falske værdier

I Python kan individuelle værdier evalueres til enten Trueeller False. De behøver ikke nødvendigvis at være en del af et større udtryk for at evaluere til en sandhedsværdi, fordi de allerede har en, der er bestemt af reglerne i Python-sproget.

De grundlæggende regler er:

  • Værdier, der vurderes til False, overvejes Falsy.
  • Værdier, der vurderes til True, overvejes Truthy.

Ifølge Python-dokumentationen:

Ethvert objekt kan testes for sandhedsværdi, til brug i en ifeller whiletilstand eller som operand af de boolske operationer nedenfor (og, eller ikke).

? Boolsk kontekst

Når vi bruger en værdi som en del af et større udtryk eller som en ifeller whilebetingelse, bruger vi den i en boolsk sammenhæng .

Du kan tænke på en boolsk kontekst som en bestemt "del" af din kode, der kræver en værdi for at være enten Trueeller Falsegive mening.

For eksempel (se nedenfor) skal betingelsen efter ifnøgleordet eller efter whilenøgleordet evalueres til enten Trueeller False:

? Tip: Værdien kan gemmes i en variabel. Vi kan skrive navnet på variablen efter nøgleordet ifeller i whilestedet for selve værdien. Dette giver den samme funktionalitet.

Nu hvor du ved, hvad sandhed og falske værdier er, og hvordan de fungerer i en boolsk sammenhæng, lad os se nogle reelle eksempler på sandhed og falske værdier.

? Falske værdier

Sekvenser og samlinger:

  • Tomme lister []
  • Tomme tupler ()
  • Tomme ordbøger {}
  • Tomme sæt set()
  • Tomme strenge ""
  • Tomme intervaller range(0)

Tal

  • Nul af enhver numerisk type.
  • Heltal: 0
  • Flyde: 0.0
  • Kompleks: 0j

Konstanter

  • None
  • False

Falsiske værdier var årsagen til, at der ikke var noget output i vores oprindelige eksempel, når værdien af avar nul.

Værdien 0er falsk, så ifbetingelsen vil være, Falseog den betingede kører ikke i dette eksempel:

>>> a = 0 >>> if a: print(a) # No Output 

Uth Sandhedsværdier

Ifølge Python-dokumentationen:

Som standard betragtes et objekt som sandt .

Sandhedsværdier inkluderer:

  • Ikke-tomme sekvenser eller samlinger (lister, tupler, strenge, ordbøger, sæt).
  • Numeriske værdier, der ikke er nul.
  • True

Dette er grunden til, at værdien af ablev udskrevet i vores oprindelige eksempel, fordi dens værdi var 5 (en sandhedsværdi):

>>> a = 5 >>> if a: print(a) # Output 5

? Den indbyggede bool () funktion

Du kan kontrollere, om en værdi enten er sand eller falsk med den indbyggede bool()funktion.

Ifølge Python-dokumentationen er denne funktion:

Returnerer en boolsk værdi, dvs. en af Trueeller False. x (argumentet) konverteres ved hjælp af standardproceduren for sandhedstest.

Du behøver kun at overføre værdien som argumentet på denne måde:

>>> bool(5) True >>> bool(0) False >>> bool([]) False >>> bool({5, 5}) True >>> bool(-5) True >>> bool(0.0) False >>> bool(None) False >>> bool(1) True >>> bool(range(0)) False >>> bool(set()) False >>> bool({5, 6, 2, 5}) True

? Tip: Du kan også passere en variabel som argument til test, hvis dens værdi er truthy eller falsy.

? Reelle eksempler

One of the advantages of using truthy and falsy values is that they can help you make your code more concise and readable. Here we have two real examples.

Example:

We have this function print_even() that takes as an argument a list or tuple that contains numbers and only prints the values that are even. If the argument is empty, it prints a descriptive message:

def print_even(data): if len(data) > 0: for value in data: if value % 2 == 0: print(value) else: print("The argument cannot be empty")

Notice this line:

if len(data) > 0:

We can make the condition much more concise with truthy and falsy values:

if data:

If the list is empty, data will evaluate to False. If it's not empty, it will evaluate to True. We get the same functionality with more concise code.

This would be our final function:

def print_even(data): if data: for value in data: if value % 2 == 0: print(value) else: print("The argument cannot be empty")

Example:

We could also use truthy and falsy values to raise an exception (error) when the argument passed to a function is not valid.

>>> def print_even(data): if not data: raise ValueError("The argument data cannot be empty") for value in data: if value % 2 == 0: print(value)

In this case, by using not data as the condition of the if statement, we are getting the opposite truth value of data for the if condition.

Let's analyze not data in more detail:

If data is empty:

  • It will be a falsy value, so data will evaluate to False.
  • not data will be equivalent to not False, which is True.
  • The condition will be True.
  • The exception will be raised.

If data is not empty:

  • It will be a truthy value, so it will evaluate to True.
  • not data will be equivalent to not True, which is False .
  • The condition will be False.
  • The exception will not be raised.

? Making Custom Objects Truthy and Falsy Values

Hvis du er fortrolig med klasser og objektorienteret programmering, kan du tilføje en speciel metode til dine klasser for at få dine objekter til at virke som sandfærdige og falske værdier.

__bool __ ()

Med den specielle metode __bool__()kan du indstille en "tilpasset" tilstand, der bestemmer, hvornår et objekt i din klasse vil evaluere til Trueeller False.

Ifølge Python-dokumentationen:

Som standard betragtes et objekt som sandt, medmindre dets klasse definerer enten en __bool__()metode, der returnerer Falseeller en __len__()metode, der returnerer nul, når den kaldes med objektet.

For eksempel, hvis vi har denne meget enkle klasse:

>>> class Account: def __init__(self, balance): self.balance = balance

Du kan se, at der ikke er defineret nogen specielle metoder, så alle de objekter, du opretter fra denne klasse, evalueres altid til True:

>>> account1 = Account(500) >>> bool(account1) True >>> account2 = Account(0) >>> bool(account2) True

We can customize this behavior by adding the special method __bool__():

>>> class Account: def __init__(self, balance): self.balance = balance def __bool__(self): return self.balance > 0

Now, if the account balance is greater than zero, the object will evaluate to True. Otherwise, if the account balance is zero, the object will evaluate to False.

>>> account1 = Account(500) >>> bool(account1) True >>> account2 = Account(0) >>> bool(account2) False

? Tip: If __bool__() is not defined in the class but the __len__() method is, the value returned by this method will determine if the object is truthy or falsy.

? In Summary

  • Truthy values are values that evaluate to True in a boolean context.
  • Falsy values are values that evaluate to False in a boolean context.
  • Falsy values include empty sequences (lists, tuples, strings, dictionaries, sets), zero in every numeric type, None, and False.
  • Sandhedsværdier inkluderer ikke-tomme sekvenser, tal (undtagen 0i hver numerisk type) og dybest set enhver værdi, der ikke er falsk.
  • De kan bruges til at gøre din kode mere kortfattet.

Jeg håber virkelig, du kunne lide min artikel og fandt det nyttigt. Nu kan du arbejde med sandfærdige og falske værdier i dine Python-projekter. Tjek mine online kurser. Følg mig på Twitter. ⭐️