Значення істинності та хибності в Python: докладний вступ

Ласкаво просимо

У цій статті ви дізнаєтесь:

  • Що таке неправдиві та хибні цінності.
  • Що робить цінність неправдивою чи хибною.
  • Як використовувати bool()функцію, щоб визначити, чи є значення істинним чи хибним.
  • Як зробити об’єкти з визначених користувачем класів неправдивими чи хибними за допомогою спеціального методу __bool __.

Давайте почнемо! ✨

Val Цінність істини проти цінності істинної та хибної

Дозвольте мені познайомити вас з цими поняттями, порівнюючи їх зі значеннями , Trueі Falseщо ми , як правило , працюють з.

Вирази з операндами та операторами обчислюють або Trueабо, Falseі вони можуть бути використані в умові ifабо, whileщоб визначити, чи повинен працювати код коду.

Ось приклад:

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

У цьому прикладі все працює так, як ми очікували, оскільки ми використали вираз із двома операндами та оператором 5 < 3.

Але що, на вашу думку, станеться, якщо ми спробуємо запустити цей код?

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

Зверніть увагу, що зараз ми не маємо типового виразу поруч із ifключовим словом, а лише змінну:

Дивно, але результат:

5

Якщо ми змінимо значення aна нуль, ось так:

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

Виходу немає.

Я впевнений, що ви, мабуть, запитуєте це зараз: що змусило код успішно працювати?

Змінна aне є типовим виразом. Він не має операторів та операндів, то чому він оцінив значення Trueабо Falseзалежно від його значення?

Відповідь лежить на концепції цінностей Істини та Фальсі, які самі по собі не є цінностями істини, але вони оцінюють або до, Trueабо False.

Val Істинні та хибні цінності

У Python окремі значення можуть мати значення Trueабо False. Вони не обов’язково повинні бути частиною більшого виразу, щоб оцінити значення істини, оскільки вони вже мають таке, яке визначено правилами мови Python.

Основні правила:

  • FalseРозглядаються значення, які оцінюються як Falsy.
  • TrueРозглядаються значення, які оцінюються як Truthy.

Відповідно до документації Python:

Будь-який об'єкт може бути перевірений на істинність, на використання в ifабо whileстані або як операнд булевих операцій, наведених нижче (і, або, ні).

🔹 Логічний контекст

Коли ми використовуємо значення як частину більшого виразу або як ifабо whileумову, ми використовуємо його в логічному контексті .

Ви можете думати про логічний контекст як про певну "частину" вашого коду, яка вимагає, щоб значення було Trueабо Falseмає сенс.

Наприклад, (див. Нижче) умова після ifключового слова або після того, як whileключове слово має оцінюватись до Trueабо False:

💡 Порада: Значення можна зберігати у змінній. Ми можемо записати ім’я змінної після ключового слова ifабо whileзамість самого значення. Це забезпечить однакову функціональність.

Тепер, коли ви знаєте, що таке неправдиві та хибні цінності та як вони працюють у логічному контексті, давайте подивимось декілька реальних прикладів істинних та хибних значень.

Неправдиві цінності

Послідовності та колекції:

  • Порожні списки []
  • Порожні кортежі ()
  • Порожні словники {}
  • Порожні набори set()
  • Порожні рядки ""
  • Порожні діапазони range(0)

Числа

  • Нуль будь-якого числового типу.
  • Ціле число: 0
  • Поплавок: 0.0
  • Комплекс: 0j

Константи

  • None
  • False

Неправдиві значення були причиною того, що в нашому початковому прикладі не було результату, коли значення aдорівнювало нулю.

Значення 0хибне, тому ifумова буде, Falseа умовна не буде запущена в цьому прикладі:

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

🔹 Неправдиві цінності

Відповідно до документації Python:

За замовчуванням об’єкт вважається істинним .

Істинні значення включають:

  • Непорожні послідовності або колекції (списки, кортежі, рядки, словники, набори).
  • Числові значення, які не дорівнюють нулю.
  • True

Ось чому aв нашому початковому прикладі було надруковано значення, оскільки його значення було 5 (істинне значення):

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

🔸 Вбудована функція bool ()

Ви можете перевірити, чи є значення неправдивим чи хибним, за допомогою вбудованої bool()функції.

Відповідно до документації Python, ця функція:

Повертає булеве значення, тобто одне з Trueабо False. x (аргумент) перетворюється за допомогою стандартної процедури перевірки істинності.

Вам потрібно лише передати значення як аргумент, наприклад:

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

💡 Порада: Ви також можете передати змінну як аргумент, щоб перевірити, чи є її значення хибним чи хибним.

🔹 Реальні приклади

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

Якщо ви знайомі з класами та об'єктно-орієнтованим програмуванням, ви можете додати спеціальний метод до своїх класів, щоб ваші об'єкти діяли як істинні та хибні значення.

__bool __ ()

За допомогою спеціального методу __bool__()ви можете встановити "індивідуальну" умову, яка визначатиме, коли об'єкт вашого класу буде оцінюватися як Trueабо False.

Відповідно до документації Python:

За замовчуванням об'єкт вважається істинним, якщо його клас не визначає або __bool__()метод, який повертає, Falseабо __len__()метод, який повертає нуль, коли він викликається з об'єктом.

Наприклад, якщо ми маємо цей дуже простий клас:

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

Ви бачите, що ніяких спеціальних методів не визначено, тому всі об’єкти, які ви створюєте з цього класу, завжди оцінюватимуться як 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. ⭐️