如何在 Python 中检查变量是否为 None

PythonPythonBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何在 Python 中检查一个变量是否为 None。实验首先会解释 None 值,它是一个特殊的常量,表示没有值。你将创建 Python 脚本,以了解当函数没有返回值时如何返回 None、如何将 None 赋值给变量,以及如何在函数中使用 None 作为默认参数。

接着,实验会指导你使用 is 运算符专门检查 None,将其与其他假值(如 0、False 和空字符串)区分开来。这能确保你在 Python 代码中准确识别变量何时真正为 None 值。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) 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{{"如何在 Python 中检查变量是否为 None"}} python/booleans -.-> lab-559606{{"如何在 Python 中检查变量是否为 None"}} python/conditional_statements -.-> lab-559606{{"如何在 Python 中检查变量是否为 None"}} python/arguments_return -.-> lab-559606{{"如何在 Python 中检查变量是否为 None"}} python/default_arguments -.-> lab-559606{{"如何在 Python 中检查变量是否为 None"}} python/data_collections -.-> lab-559606{{"如何在 Python 中检查变量是否为 None"}} end

理解 None 值

在这一步中,你将学习 Python 中的 None 值。None 是 Python 中的一个特殊常量,代表没有值或空值。它通常用于表示变量尚未被赋值,或者函数没有返回值。

让我们首先使用 VS Code 编辑器在你的 ~/project 目录下创建一个名为 none_example.py 的 Python 文件。

## ~/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
  • 我们分别使用 "Alice" 和空字符串 "" 调用 greet 函数,并打印结果。

现在,运行这个 Python 脚本:

python ~/project/none_example.py

你应该会看到以下输出:

Hello, Alice
None

如你所见,当我们使用 "Alice" 调用 greet 函数时,它返回 "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 实例。

让我们使用 VS Code 编辑器在你的 ~/project 目录下创建一个名为 is_none_example.py 的 Python 文件。

## ~/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
  • 如果 valueNone,我们打印 "The value is None"。
  • 否则,我们打印 "The value is not None"。
  • 我们分别使用 None 和 "Hello" 调用 check_none 函数,以展示其中的区别。

现在,运行这个 Python 脚本:

python ~/project/is_none_example.py

你应该会看到以下输出:

The value is None
The value is not None

如你所见,is 运算符能够正确识别变量是否为 None

在检查是否为 None 时,使用 is 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

这个示例表明,如果对象的 __eq__ 方法被重写,使用 == None 可能会导致意外的结果。然而,is None 检查始终能正确识别对象是否真的为 None

区分 None 与其他假值

在这一步中,你将学习如何区分 Python 中的 None 和其他假值。在 Python 中,有几个值被视为“假值”,即在布尔上下文中它们会被评估为 False。这些值包括 False00.0、空字符串 ("")、空列表 ([])、空元组 (())、空字典 ({}) 和 None

重要的是要明白,虽然 None 是假值,但它与其他这些值并不相同。在专门检查是否为 None 时,使用 is 运算符至关重要,因为它能将 None 与其他假值区分开来。

让我们使用 VS Code 编辑器在你的 ~/project 目录下创建一个名为 falsy_values.py 的 Python 文件。

## ~/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
  • 我们使用 NoneFalse0""[] 调用这两个函数,以展示其中的差异。

现在,运行这个 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 在使用 is None 运算符时会被识别为 None

使用 is None 可确保你是在专门检查是否没有值,而不仅仅是检查任何评估为 False 的值。这种区分对于编写健壮且准确的 Python 代码非常重要。

总结

在本次实验中,你学习了 Python 中的 None 值,它表示没有值。你了解了在没有可用值时函数如何返回 None,以及如何将 None 赋值给变量。

此外,你还探索了在函数中使用 None 作为默认参数值,这样当没有提供参数时,函数可以表现出不同的行为。本实验通过实际示例和代码片段展示了这些概念。