应使用 is none 判断变量是否为 none,因为none是单例对象,is比较内存地址,准确、高效且防篡改;==依赖__eq__可能被自定义类误导,pep 8明确推荐is。

判断一个变量是否为 None,应该用 is,而不是 ==。
为什么推荐用 is None
is 比较的是对象的身份(即内存地址),而 None 是单例对象——整个 Python 运行过程中只存在一个 None 实例。因此用 is 判断最准确、最快,也最符合语义。
用 == 虽然在绝大多数情况下也能得到正确结果,但它是调用对象的 __eq__ 方法,存在被自定义类篡改行为的风险。例如:
class BadClass:
def __eq__(self, other):
return True
<p>x = BadClass()
print(x == None) # True ← 错误地“假装”是 None
print(x is None) # False ← 正确结果
哪些写法是安全且推荐的
-
if x is None:✅ 标准、清晰、高效 -
if x is not None:✅ 同样推荐,语义明确 -
if not x:❌ 不推荐用于判 None,因为会把0、''、[]、False等“falsy 值”一并误判
实际开发中的常见误区
有人习惯写 if x == None:,这虽然不报错,但 PEP 8 明确指出应使用 is。主流 linter(如 flake8、pylint)也会警告该写法。
立即学习“Python免费学习笔记(深入)”;
另外注意:不要写 if x is None and y is None: 这类长条件时省略括号,逻辑没问题,但可读性差;建议拆成多行或加空格提升可读性。
扩展:其他单例值也建议用 is
除了 None,Python 中的布尔值 True 和 False 也是单例,所以:
-
if x is True:比if x == True:更稳妥(尤其当x是整数1时,1 == True为True,但语义上不是布尔真值) - 不过更常见的写法是直接
if x:或if not x:,前提是明确x的类型和预期行为










