Значение None в Python

В этом уроке вы узнаете, что такое значение None в Python и о том, как его правильно применять в своем коде.

Содержание

Что такое 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.

Похожие посты
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *