Как проверить, является ли переменная None в Python

PythonPythonBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы научитесь проверять, является ли переменная None в Python. Практическое занятие начинается с объяснения значения None — специальной константы, представляющей отсутствие значения. Вы создадите скрипты на Python, чтобы понять, как функция возвращает None, когда нет возвращаемого значения, как присвоить None переменной и как использовать None в качестве аргумента по умолчанию в функциях.

Затем в рамках практического занятия вы научитесь использовать оператор is для конкретной проверки на None, чтобы отличить его от других ложных значений, таких как 0, False и пустые строки. Это позволит вам точно определить, когда переменная действительно содержит значение None в вашем коде на Python.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python/BasicConceptsGroup -.-> python/variables_data_types("Variables and Data Types") python/BasicConceptsGroup -.-> python/booleans("Booleans") python/ControlFlowGroup -.-> python/conditional_statements("Conditional Statements") python/FunctionsGroup -.-> python/arguments_return("Arguments and Return Values") python/FunctionsGroup -.-> python/default_arguments("Default Arguments") python/PythonStandardLibraryGroup -.-> python/data_collections("Data Collections") subgraph Lab Skills python/variables_data_types -.-> lab-559606{{"Как проверить, является ли переменная None в Python"}} python/booleans -.-> lab-559606{{"Как проверить, является ли переменная None в Python"}} python/conditional_statements -.-> lab-559606{{"Как проверить, является ли переменная None в Python"}} python/arguments_return -.-> lab-559606{{"Как проверить, является ли переменная None в Python"}} python/default_arguments -.-> lab-559606{{"Как проверить, является ли переменная None в Python"}} python/data_collections -.-> lab-559606{{"Как проверить, является ли переменная None в Python"}} end

Понимание значения None

На этом этапе вы узнаете о значении None в Python. None — это специальная константа в Python, которая представляет отсутствие значения или нулевое значение. Часто она используется для указания того, что переменной не было присвоено значение или что функция не возвращает значение.

Начнем с создания файла Python с именем none_example.py в каталоге ~/project с помощью редактора VS Code.

## ~/project/none_example.py
def greet(name):
    if name:
        return "Hello, " + name
    else:
        return None

result = greet("Alice")
print(result)

result = greet("")
print(result)

В этом коде:

  • Мы определяем функцию greet, которая принимает name в качестве входного параметра.
  • Если name не пустое, функция возвращает строку приветствия.
  • Если name пустое, функция возвращает None.
  • Мы вызываем функцию greet с аргументом "Alice" и пустой строкой "" и выводим результаты.

Теперь запустите скрипт Python:

python ~/project/none_example.py

Вы должны увидеть следующий вывод:

Hello, Alice
None

Как вы можете видеть, когда мы вызываем функцию greet с аргументом "Alice", она возвращает "Hello, Alice". Когда мы вызываем ее с пустой строкой, она возвращает None, которое затем выводится в консоль.

None не то же самое, что 0, False или пустая строка. Это отдельное значение, которое представляет отсутствие значения.

Вы можете присвоить None переменной:

## ~/project/none_example2.py
x = None
print(x)

Запустите скрипт:

python ~/project/none_example2.py

Вывод:

None

Вы также можете использовать None в качестве значения аргумента по умолчанию в функции:

## ~/project/none_example3.py
def my_function(arg=None):
    if arg is None:
        print("No argument was passed.")
    else:
        print("Argument:", arg)

my_function()
my_function("Hello")

Запустите скрипт:

python ~/project/none_example3.py

Вывод:

No argument was passed.
Argument: Hello

В этом примере, если при вызове функции my_function не передается аргумент, arg по умолчанию будет иметь значение None.

Использование оператора is для проверки на None

На этом этапе вы научитесь использовать оператор is для проверки, является ли переменная None. В Python оператор is используется для проверки, ссылаются ли две переменные на один и тот же объект в памяти. Это отличается от оператора ==, который проверяет, имеют ли две переменные одинаковые значения. При работе с None рекомендуется использовать оператор is, так как None является синглтоном (одиночным объектом), то есть в памяти существует только один экземпляр None.

Создадим файл Python с именем is_none_example.py в каталоге ~/project с помощью редактора VS Code.

## ~/project/is_none_example.py
def check_none(value):
    if value is None:
        print("The value is None")
    else:
        print("The value is not None")

x = None
check_none(x)

y = "Hello"
check_none(y)

В этом коде:

  • Мы определяем функцию check_none, которая принимает value в качестве входного параметра.
  • Мы используем оператор is для проверки, является ли value равным None.
  • Если value равно None, мы выводим "The value is None".
  • В противном случае мы выводим "The value is not None".
  • Мы вызываем функцию check_none с аргументами None и "Hello", чтобы продемонстрировать разницу.

Теперь запустите скрипт Python:

python ~/project/is_none_example.py

Вы должны увидеть следующий вывод:

The value is None
The value is not None

Как вы можете видеть, оператор is правильно определяет, когда переменная равна None.

Важно использовать is None вместо == None при проверке на None. Хотя == None может работать в некоторых случаях, не гарантируется, что он будет работать во всех ситуациях, особенно при работе с пользовательскими объектами, которые переопределяют оператор ==. Использование is None является рекомендуемым и наиболее надежным способом проверки на None.

Вот еще один пример, иллюстрирующий это:

## ~/project/is_none_example2.py
class MyClass:
    def __eq__(self, other):
        return True  ## Always return True for equality

obj = MyClass()
print(obj == None)  ## Might return True due to the overridden __eq__ method
print(obj is None)  ## Always returns False because obj is not None

Запустите скрипт:

python ~/project/is_none_example2.py

Вывод:

True
False

Этот пример показывает, что использование == None может привести к непредвиденным результатам, если метод __eq__ объекта переопределен. Проверка is None, однако, всегда правильно определяет, является ли объект действительно None.

Различие None от других ложных значений

На этом этапе вы научитесь различать None от других ложных значений в Python. В Python несколько значений считаются "ложными", то есть они оцениваются как False в булевом контексте. К ним относятся False, 0, 0.0, пустые строки (""), пустые списки ([]), пустые кортежи (()), пустые словари ({}) и None.

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

Создадим файл Python с именем falsy_values.py в каталоге ~/project с помощью редактора VS Code.

## ~/project/falsy_values.py
def check_falsy(value):
    if value:
        print(f"{value!r} is considered True")
    else:
        print(f"{value!r} is considered False")

check_falsy(None)
check_falsy(False)
check_falsy(0)
check_falsy("")
check_falsy([])

print("\nChecking with 'is None':")

def check_none(value):
    if value is None:
        print(f"{value!r} is None")
    else:
        print(f"{value!r} is not None")

check_none(None)
check_none(False)
check_none(0)
check_none("")
check_none([])

В этом коде:

  • Мы определяем функцию check_falsy, которая принимает value в качестве входного параметра и проверяет его истинность в булевом контексте.
  • Затем мы определяем функцию check_none, которая использует оператор is None для конкретной проверки, является ли значение None.
  • Мы вызываем обе функции с аргументами None, False, 0, "" и [], чтобы продемонстрировать различия.

Теперь запустите скрипт Python:

python ~/project/falsy_values.py

Вы должны увидеть следующий вывод:

None is considered False
False is considered False
0 is considered False
'' is considered False
[] is considered False

Checking with 'is None':
None is None
False is not None
0 is not None
'' is not None
[] is not None

Этот вывод четко показывает, что хотя все эти значения считаются ложными в булевом контексте, только None идентифицируется как None при использовании оператора is None.

Использование is None гарантирует, что вы конкретно проверяете на отсутствие значения, а не на любое значение, которое оценивается как False. Это различие важно для написания надежного и точного кода на Python.

Резюме

В этом практическом занятии (лабораторной работе) вы узнали о значении None в Python, которое представляет отсутствие значения. Вы увидели, как функция может возвращать None, когда значение недоступно, и как присвоить None переменной.

Кроме того, вы изучили использование None в качестве значения по умолчанию для аргумента функции, что позволяет функции вести себя по - другому, когда аргумент не предоставлен. В рамках практического занятия эти концепции были продемонстрированы на практических примерах и фрагментах кода.