NoneType
None — единственный экземпляр класса NoneType. Он обозначает отсутствие значения:
print(type(None))print(None is None)print(bool(None))Функция без return возвращает None. Для проверки используйте is, а не ==:
value = Noneif value is None: print("значения нет")if value is not None: print("значение есть")Типичное применение — значение по умолчанию для изменяемых аргументов:
def collect(item, bucket=None): if bucket is None: bucket = [] bucket.append(item) return bucketEllipsis и NotImplemented
Рядом с None стоят ещё два встроенных синглтона:
print(type(...))print(type(NotImplemented))...(Ellipsis) — заглушка в теле функции или маркер в срезах (например, в NumPy) и в аннотацияхNotImplemented— значение, которое возвращают бинарные специальные методы, если операция не поддерживается для данного типа операнда
class Meters: def __init__(self, value): self.value = value def __add__(self, other): if not isinstance(other, Meters): return NotImplemented return Meters(self.value + other.value)bool
bool — подкласс int с ровно двумя экземплярами: True и False.
print(isinstance(True, int))print(True + True)print(True * 10)print(int(False))Результат: True, 2, 10, 0.
Правила истинности
Ложными считаются:
NoneиFalse- нулевые числа:
0,0.0,0j,Decimal(0),Fraction(0, 1) - пустые последовательности и коллекции:
"",[],(),{},set(),range(0) - объекты, у которых
__bool__возвращаетFalseили__len__возвращает0
Всё остальное истинно.
print(bool([]))print(bool([0]))print(bool(""))print(bool(" "))print(bool(0.0))Результат: False, True, False, True, False.
Логические функции
nums = [1, 2, 3, 0]print(any(nums))print(all(nums))print(any(n > 2 for n in nums))print(all(n >= 0 for n in nums))print(sum(n > 1 for n in nums))Результат: True, False, True, True, 2.
Побитовые операции над bool
print(True & False)print(True | False)print(True ^ True)print(not True)Операторы &, |, ^ на булевых значениях возвращают bool. Оператор ~ использовать нельзя: ~True равно -2, потому что это побитовое отрицание целого числа.
Задания
- Напишите функцию, которая возвращает первое «истинное» значение из переданных аргументов.
- Объясните результат выражения
sum([True, True, False]). - Создайте класс с методом
__bool__, истинный только при непустом внутреннем списке.
