Igazság és hamis értékek a Pythonban: részletes bevezetés

Üdvözöljük

Ebben a cikkben megtudhatja:

  • Melyek az igazság és a hamis értékek.
  • Mi teszi az értéket valósággá vagy hamissággá.
  • Hogyan használhatjuk a bool()függvényt annak megállapítására, hogy egy érték igaz vagy hamis.
  • Hogyan lehet a felhasználó által meghatározott osztályokból származó objektumokat valósággá vagy hamissá tenni a speciális módszerrel __bool __.

Kezdjük! ✨

? Igazsági értékek az igazsággal és a hamis értékekkel szemben

Hadd mutassam be ezeket a fogalmakat, ha összehasonlítjuk őket azokkal az értékekkel Trueés Falsehogy általában dolgozni.

Az operandusokkal és operátorokkal rendelkező kifejezések valamelyikre Truevagy egyre értékelik őket, Falseés egy állapotban ifvagy whilefeltételben használhatók annak meghatározására, hogy futtasson-e egy kódblokkot.

Itt van egy példa:

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

Ebben a példában minden úgy működik, ahogy vártuk, mert két operandusú és operátoros kifejezést használtunk 5 < 3.

De mit gondolsz, mi fog történni, ha megpróbáljuk futtatni ezt a kódot?

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

Figyelje meg, hogy most nincs egy tipikus kifejezés a ifkulcsszó mellett, csak egy változó:

Meglepő módon a kimenet:

5

Ha anulla értékre változtatjuk , így:

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

Nincs kimenet.

Biztos vagyok benne, hogy most biztosan ezt kérdezi: mitől futott sikeresen a kód?

A változó anem tipikus kifejezés. Operátorai és operandusai nincsenek, miért értékelte az értékét Truevagy Falseattól függően?

A válasz az Igazság és a Falsy értékek fogalmán rejlik, amelyek maguk nem igazságértékek, de Truevagy egyiknek vagy másiknak értékelik False.

? Igazság és hamis értékek

Python, egyedi értékeket tudja értékelni, hogy vagy True, vagy False. Nem feltétlenül kell egy nagyobb kifejezés részének lenniük ahhoz, hogy igazságértéket értékeljenek, mert már van olyanjuk, amelyet a Python nyelv szabályai határoztak meg.

Az alapvető szabályok a következők:

  • Azokat az értékeket, amelyek értékelik, Falsefigyelembe veszik Falsy.
  • Azokat az értékeket, amelyek értékelik, Truefigyelembe veszik Truthy.

A Python dokumentáció szerint:

Bármely objektum lehet vizsgálni igazság érték, használatra olyan ifvagy whileállapot vagy mint operandus a Boole műveletek alábbi (és, vagy, nem).

? Logikai kontextus

Ha egy értéket egy nagyobb kifejezés részeként, ifvagy whilefeltételként vagy feltételként használunk, akkor azt logikai kontextusban használjuk .

Gondolhat a logikai kontextusra, mint a kódjának egy bizonyos "részére", amelyhez meg kell követelni egy értéket, Truevagy Falseannak értelme van.

Például (lásd alább) az az állapot, miután a ifkulcsszó vagy után whilekulcsszónak, hogy értékelje, hogy vagy Truevagy False:

? Tipp: Az érték tárolható egy változóban. A változó nevét a ifvagy whilekulcsszó után írhatjuk az érték helyett. Ez ugyanazt a funkciót fogja biztosítani.

Most, hogy tudja, mi az igazság és hamis érték, és hogyan működik logikai kontextusban, nézzünk meg néhány valódi példát az igazság és a hamis értékekre.

? Hamis értékek

Szekvenciák és gyűjtemények:

  • Üres listák []
  • Üres tincsek ()
  • Üres szótárak {}
  • Üres készletek set()
  • Üres húrok ""
  • Üres tartományok range(0)

Számok

  • Bármely numerikus típusú nulla.
  • Egész szám: 0
  • Úszó: 0.0
  • Összetett: 0j

Állandóak

  • None
  • False

A hamis értékek voltak az oka annak, hogy a kezdeti példánkban nem volt kimenet, amikor a anulla értéke.

Az érték 0hamis, ezért a iffeltétel meg lesz, Falseés a feltétel nem fog futni ebben a példában:

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

? Igazságértékek

A Python dokumentáció szerint:

Alapértelmezés szerint egy objektum igaznak tekintendő .

Az igazságértékek a következők:

  • Nem üres szekvenciák vagy gyűjtemények (felsorolások, tömbök, húrok, szótárak, halmazok).
  • Numerikus értékek, amelyek nem nulla.
  • True

Ezért anyomtattuk ki a kezdeti példánkban a (z) értékét, mert értéke 5 volt (igaz érték):

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

? A Beépített bool () funkció

A beépített bool()funkcióval ellenőrizheti, hogy egy érték igaz vagy hamis .

A Python dokumentáció szerint ez a függvény:

Boole-értéket ad vissza, azaz a Truevagy egyikét False. Az x (az argumentum) a szokásos igazságtesztelési eljárással konvertálódik.

Csak az értéket kell megadni argumentumként, így:

>>> 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

? Tipp: Adhat argumentumként egy változót is annak tesztelésére, hogy az értéke igaz vagy hamis.

? Valódi példák

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

Ha ismeri az osztályokat és az objektum-orientált programozást, hozzáadhat egy speciális módszert az osztályaihoz, hogy az objektumai valósághű és hamis értékekként viselkedjenek.

__bool __ ()

A speciális módszerrel __bool__()beállíthat egy "testreszabott" feltételt, amely meghatározza, hogy az osztály egyik objektuma mikor értékelje Truevagy False.

A Python dokumentáció szerint:

Alapértelmezés szerint az objektum akkor tekinthető igaznak, ha az osztálya meghatározza a __bool__()visszatérő metódust Falsevagy a __len__()nullával térő metódust, ha az objektummal meghívják.

Például, ha van egy nagyon egyszerű osztályunk:

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

Láthatja, hogy nincs meghatározva speciális módszer, ezért az ebből az osztályból létrehozott objektumok mindig a következőket értékelik 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.
  • Truthy values include non-empty sequences, numbers (except 0 in every numeric type), and basically every value that is not falsy.
  • They can be used to make your code more concise.

I really hope you liked my article and found it helpful. Now you can work with truthy and falsy values in your Python projects. Check out my online courses. Follow me on Twitter. ⭐️