Python Nation🐍🇺🇦
Чому None перевіряють через is, а не ==
У пайтоні прийнято писати if x is None, а не if x == None. І це не просто стиль.
None - це єдиний обʼєкт на всю програму. Скільки б разів ти не написав None, це завжди той самий обʼєкт у памʼяті. Тому is тут найточніша й найшвидша перевірка: порівняння за ідентичністю, без зайвих викликів.
== працює інакше - він викликає метод __eq__. А його можна перевизначити. І тоді == None починає працювати неочікувано:
class Weird:
def __eq__(self, other):
return True
w = Weird()
w == None # True
w is None # False
Обʼєкт очевидно не None, але == каже, що None. З is такого не станеться ніколи бо його не можна перевизначити.
Коротко: для None (як і для True/False) завжди is. Це швидше, надійніше і не залежить від того, що хтось накрутив в __eq__.
1 · 196 ·