Тип NoneType

У Python є спеціальне значення, яке означає "нічого", "відсутність значення". Це окремий тип — NoneType — і в Python він має лише одне значення: None.

У цьому розділі:

Що таке None?

None — це єдине значення типу NoneType. Його використовують для позначення того, що:

  • значення ще не задано,
  • функція нічого не повертає,
  • відсутнє значення в змінній, параметрі, обʼєкті тощо.
x = None
print(type(x))  # <class 'NoneType'>

Метафора: уявіть порожню коробку. Вона існує, але в ній нічого немає — це і є None.

Коли використовується None?

За замовчуванням. Функція нічого не повертає — Python автоматично повертає None.

def greet():
    print("Привіт!")

result = greet()
print(result)  # None

Місце заповнювача (placeholder). Визначили змінну data, але значення ще невідоме:

data = None  # ще немає даних

Перевірка перед виконанням:

user = None
if user is None:
    print("Користувач не визначений")

Як перевіряти None?

Слід використовувати оператор is:

if value is None:
    print("Порожнє значення")

❌ Не рекомендується:

if value == None:  # поганий стиль

✅ Рекомендується:

if value is None:  # добрий стиль

None у булевому контексті

None розглядається як False, тобто:

print(bool(None))  # False

Отже:

value = None
if not value:
    print("Порожньо або None")

Але якщо важливо точно перевірити None, краще використовувати is None.

Приклади використання

Фільтрація значень. Цей код фільтрує список values, залишаючи тільки “істинні” (truthy) значення — тобто ті, які не дорівнюють False у булевому контексті.

values = [0, "", None, "text"]
filtered = list(filter(bool, values))
print(filtered)  # ['text']

Значення за замовчуванням. Цей код визначає функцію connect, яка приймає один необов’язковий параметр url. Якщо цей параметр не передано або він дорівнює None, то функція встановлює для нього значення за замовчуванням — "https://default.com". Далі функція виводить повідомлення про підключення до цього URL.

def connect(url=None):
    if url is None:
        url = "https://default.com"
    print(f"Підключення до {url}")

Порівняння is vs ==

a = None
b = None
print(a == b)  # True
print(a is b)  # True

x = []
y = []
print(x == y)  # True (вміст однаковий)
print(x is y)  # False (різні обʼєкти)

Практичне завдання: користувач і email

Дано: email — може бути рядком або None.

Завдання: 1. Якщо email — це None, вивести: "Немає електронної пошти". 2. Інакше: "Надсилаємо листа на {email}".

email = None

if email is None:
    print("Немає електронної пошти")
else:
    print(f"Надсилаємо листа на {email}")

Висновки

  • None — це спеціальне значення типу NoneType, що означає "нічого".
  • У булевих виразах None вважається False.
  • Перевірку на None слід робити через is.
  • Широко використовується як початкове значення, індикатор відсутності або повернення з функції без return.