HOWTO · Python
Python NULL
本教程讨论 Python 中的 NULL
本页内容
Python 没有 NULL 关键字。它类似空值的内置单例是 None,常用于标记可选值或尚未设置的对象引用。使用 value is None 来检查。None 是一个值,其类型为 NoneType;它不是数值零,Python 代码也不会赋值 C 风格的指针。其他语言对 NULL 各有定义,因此不要假设它们的 NULL 行为相同。
检查 Python 值是否为 None
通常使用身份运算符 is 进行检查。它判断两侧是否引用同一个对象,因此 value is None 是识别 Python 单例的明确写法。相关的检查 Python 变量是否为 None 的指南也介绍了同一任务。
运行以下独立示例:
values = [None, "ready"]
for value in values:
if value is None:
print("value is None")
else:
print("value is set")
value is None
value is set
is 检查可以区分 None 值和字符串;这两个分支也展示了如何将同一模式用于函数参数、查找结果或可选字段。你可以把示例值替换为程序中需要检查的变量。
通常不建议使用 value == None。对象所属的类可以自定义相等比较,因此它不一定表示“这个值就是 None 单例”。比较普通值的内容时使用相等比较;检查 None 时使用身份比较。这样也能避免把 0、False 或 "" 这类看似为假的值误当成 None。
检查 Python 中 None 的类型
要查看 None 值对应的类型,可以将它传给 Python 内置的 type() 函数。返回的类名是 NoneType。None 是单例值,NoneType 是它的类型。在一般代码中,使用身份检查比检查类型更清楚;不过,在探索 Python 对象或阅读诊断信息时,type() 可能会派上用场。
下面的简短示例会打印类名,而不是 Python 完整的类表示形式:
value = None
print(type(value).__name__)
NoneType
对于这个内置值,其名称是 NoneType。不要把 None 本身称为数据类型:它是一个类型为 NoneType 的对象。另外,不要用 type(value) is type(None) 代替直接的 value is None 检查;后者更直接地表达了要判断的问题。
在 Python 中用 None 表示不存在的对象引用
Python 变量引用对象,但 Python 代码不会公开可赋值的 C 风格指针。None 的常见用途之一,是表示尚未设置的可选引用,例如尚未连接到另一个节点的子节点。这是一种建模约定:None 对该属性具体表示什么,由外围程序决定。
下面的示例定义了一个具有两个可选子节点引用的节点,并检查其左子节点是否不存在:
class Node:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
root = Node("root")
print(root.left is None)
True
每个新节点的 left 和 right 最初都设为 None;后续代码可以将另一个 Node 赋给任一属性。最后的表达式检查左子节点是否仍然不存在。这个示例说明的是 Python 中的对象引用,并非可以像 C 那样解引用或赋值为 NULL 地址的指针。Python 的 None 是一个对象级的普通值,按照惯例用于表示缺失;使用可选引用前,代码应明确检查该值。