Какой тип данных используется в условии `if`?

В условии if в Python используется тип данных boolean (bool). Выражение, стоящее после if, должно быть приведено к True или False.

В Python в условии `if` используется тип данных, приводимый к булеву типу (`bool`). Это означает, что выражение, указанное в условии `if`, должно быть интерпретировано как `True` или `False`.

Вот что может быть в условии `if` и как оно преобразуется к булеву типу:
  • Булевы значения: `True` или `False` используются напрямую.
  • Числа:
    • `0` (целое или с плавающей точкой) интерпретируется как `False`.
    • Любое другое число, отличное от `0`, интерпретируется как `True`.
  • Строки:
    • Пустая строка `""` интерпретируется как `False`.
    • Любая непустая строка интерпретируется как `True`.
  • Списки, кортежи, множества, словари:
    • Пустые коллекции (например, `[]`, `()`, `set()`, `{}`) интерпретируются как `False`.
    • Непустые коллекции интерпретируются как `True`.
  • None: `None` всегда интерпретируется как `False`.
  • Другие объекты:
    Большинство объектов, созданных пользователем (т.е. экземпляры классов), интерпретируются как `True` по умолчанию. Однако, класс может определить методы `__bool__()` или `__len__()`, которые будут использоваться для определения истинности экземпляра. Если определен `__bool__()`, он должен возвращать `True` или `False`. Если `__bool__()` не определен, Python попытается использовать `__len__()`. Если `__len__()` возвращает `0`, то объект считается `False`; в противном случае он считается `True`. Если ни `__bool__()`, ни `__len__()` не определены, объект всегда считается `True`.

Примеры:
    
    if True:  # bool
        print("True")

    if 1:     # int (True)
        print("1 is True")

    if 0:     # int (False)
        print("0 is True") # Не выполнится

    if "Hello": # str (True)
        print("Hello is True")

    if "":     # str (False)
        print("Empty string is True") # Не выполнится

    if [1, 2, 3]: # list (True)
        print("List is True")

    if []:      # list (False)
        print("Empty list is True") # Не выполнится

    if None:    # None (False)
      print("None is True") # Не выполнится
    
  
Важно понимать, что Python не требует, чтобы условие `if` было булевым значением напрямую. Он выполняет неявное преобразование в булево значение, используя вышеописанные правила.
0