Значение None в Python
В этом уроке вы узнаете, что такое значение None в Python и о том, как его правильно применять в своем коде.
- Что такое None в Python?
- Применение объекта None
- 1) Использование Python None в качестве начального значения переменной
- 2) Использование None для устранения проблемы с изменяемым аргументом по умолчанию
- 3) None в качестве возвращаемого значения функции
Что такое None в Python?
None в Python— это специальный объект класса NoneType. Чтобы использовать значение None, вы указываете его следующим образом:
None
Если вы используете функцию type() для проверки типа значения None, вы получите класс NoneType:
print(type(None))
Выход:
<class 'NoneType'>
None — это одноэлементный объект класса NoneType. Это означает, что Python создает один и только один объект None во время выполнения.
Таким образом, если вы используете равенство(==) или оператор is для сравнения None с None, вы получите результат True:
print(None == None) print(None is None)
Выход:
True True
Хорошей практикой является использование оператора is или is not для сравнения значения с None.
Причина в том, что определяемые пользователем объекты могут изменить поведение оператора равенства, переопределив метод __eq__(). Например:
class Apple: def __eq__(self, other): return True apple = Apple() print(apple == None)
Выход:
True
Обратите внимание, что вы не можете переопределить поведение оператора is, как это происходит с оператором равенства(==).
Также важно отметить, что объект None имеет следующие возможности:
- None не равно нулю(0, 0,0, …).
- None — это не то же самое, что False.
- None — это не то же самое, что пустая строка(»).
- Сравнение None с любым значением вернет False, кроме самого None.
Применение объекта None
Давайте рассмотрим несколько практических примеров использования объекта None.
1) Использование Python None в качестве начального значения переменной
Если переменная не имеет начального значения, вы можете присвоить ей None, например:
state = None
Затем вы можете проверить, присвоено ли переменной значение или нет, проверив ее с помощью None следующим образом:
if state is None: state = 'start'
2) Использование None для устранения проблемы с изменяемым аргументом по умолчанию
Следующая функция добавляет цвет в список:
def append(color, colors=[]): colors.append(color) return colors
Она работает так, как и ожидалось, если вы передаете существующий список:
colors = ['red', 'green'] append('blue', colors) print(colors)
Выход:
['red', 'green', 'blue']
Однако проблема возникает, когда вы используете значение второго параметра по умолчанию. Например:
hsl = append('hue') print(hsl) rgb = append('red') print(rgb)
Выход:
['hue'] ['hue', 'red']
Проблема в том, что функция создает список после определения и использует один и тот же список при каждом последующем вызове.
Чтобы устранить эту проблему, вы можете использовать значение None в качестве параметра по умолчанию следующим образом:
def append(color, colors=None): if colors is None: colors = [] colors.append(color) return colors hsl = append('hue') print(hsl) rgb = append('red') print(rgb)
Выход:
['hue'] ['red']
3) None в качестве возвращаемого значения функции
Если функция не имеет возвращаемого значения, по умолчанию она возвращает None. Например:
def say(something): print(something) result = say('Hello') print(result)
Функция say() ничего не возвращает; поэтому она возвращает None.