При программировании на Python новички часто сталкиваются с необходимостью проверки переменной на равенство None
. В Python для этого существуют два распространенных способа: if x is not None
и if not x is None
. Оба варианта кажутся похожими, и это может вызвать путаницу.
Рассмотрим примеры:
x = None # Вариант 1 if x is not None: print('x не равен None') else: print('x равен None') # Вариант 2 if not x is None: print('x не равен None') else: print('x равен None')
Оба этих примера выведут «x равен None», потому что в обоих случаях проверяется условие «x не равен None», которое не выполняется.
Однако, несмотря на внешнюю схожесть, между этими двумя вариантами есть значимые различия. В Python оператор is
используется для проверки идентичности объектов, а не их равенства. Это означает, что x is None
проверяет, является ли x
именно объектом None
, а не просто пустым значением или нулем.
С другой стороны, оператор not
в Python инвертирует булево значение выражения, которое следует за ним. Таким образом, if not x is None
будет истинным, если x
не является None
и ложным в противном случае.
В то же время if x is not None
является более предпочтительным стилем написания кода согласно руководству по стилю Python PEP-8. Этот вариант более читаем и понятен, так как в нем явно указывается, что x
проверяется на идентичность None
, а не на равенство или неравенство какому-то булеву значению.
С точки зрения производительности разницы между этими двумя вариантами нет. Однако для улучшения читаемости и понятности кода рекомендуется использовать if x is not None
.
Добавить комментарий