|
|||||||
None (null), или немного о типе NoneType
Время создания: 29.07.2019 23:51
Раздел: Разные закладки - Python - Типы данных в Python
Запись: xintrea/mytetra_db_adgaver_new/master/base/1533761874htpybhwp7d/text.html на raw.githubusercontent.com
|
|||||||
|
|||||||
Ключевое слово 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 будет просто-напросто быстрее. |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|