Ключевое слово null обычно используется во многих языках программирования, таких как Java, C++, C# и JavaScript. Это значение, которое присваивается переменной.
Концепция ключевого слова null в том, что она дает переменной нейтральное или "нулевое" поведение.
А что же в Python?
Эквивалент null в Python: None
Он был разработан таким образом, по двум причинам:
Многие утверждают, что слово null несколько эзотерично. Это не наиболее дружелюбное слово для новичков. Кроме того, None относится именно к требуемой функциональности - это ничего, и не имеет поведения.
Присвоить переменной значение None очень просто:
my_none_variable = None
Существует много случаев, когда следует использовать None.
Часто вы хотите выполнить действие, которое может работать либо завершиться неудачно. Используя None, вы можете проверить успех действия. Вот пример:
# Мы хотели бы подключиться к базе данных. Мы не знаем, верны ли логин и пароль # Если соединение с базой будет неуспешно, то # Он бросит исключение. Обратите внимание, что MyDatabase и DatabaseException # НЕ являются реальными классами, мы просто используем их в качестве примеров. try: database = MyDatabase(db_host, db_user, db_password, db_database) database_connection = database.connect() except DatabaseException: pass if database_connection is None: print('The database could not connect') else: print('The database could connect')
Python является объектно-ориентированным, и поэтому None - тоже объект, и имеет свой тип.
>>> type(None)
<class 'NoneType'>
Проверка на None
Есть (формально) два способа проверить, на равенство None.
Один из способов - с помощью ключевого слова is.
Второй - с помощью == (но никогда не пользуйтесь вторым способом, и я попробую объяснить, почему).
Посмотрим на примеры:
null_variable = None not_null_variable = 'Hello There!' # The is keyword if null_variable is None: print('null_variable is None') else: print('null_variable is not None') if not_null_variable is None: print('not_null_variable is None') else: print('not_null_variable is not None') # The == operator if null_variable == None: print('null_variable is None') else: print('null_variable is not None') if not_null_variable == None: print('not_null_variable is None') else: print('not_null_variable is not None')
Данный код выведет:
null_variable is None not_null_variable is not None null_variable is None not_null_variable is not None
Отлично, так они делают одно и то же! Однако, не совсем. Для встроенных типов - да. Но с пользовательскими классами вы должны быть осторожны. Python предоставляет возможность переопределения операторов сравнения в пользовательских классах. Таким образом, вы можете сравнить классы, например, MyObject == MyOtherObject.
class MyClass: def __eq__(self, my_object): # Просто вернем True return True my_class = MyClass() if my_class is None: print('my_class is None, using the is keyword') else: print('my_class is not None, using the is keyword') if my_class == None: print('my_class is None, using the == syntax') else: print('my_class is not None, using the == syntax')
И получаем немного неожиданный результат:
my_class is not None, using the is keyword my_class is None, using the == syntax
Интересно, не правда ли? Вот поэтому нужно проверять на None с помощью ключевого слова is.
А ещё (для некоторых классов) вызов метода __eq__ может занимать много времени, и is будет просто-напросто быстрее.
Комментариев нет:
Отправить комментарий