如何在 Python 中将值与 None 进行比较

在 Python 中将值与 None 进行比较

How to compare values to None in Python

在 Python 中
使用
is运算符进行比较,例如. 如果两个值指向同一个对象,则运算符返回(它检查身份),而双等于运算
检查两个值是否相等。
Noneif my_var is None:isTrue==

主程序
my_var = None if my_var is None: # 👇️ this runs print('variable stores None') else: print('variable does NOT store None')

is当您需要检查对象的身份时,您应该使用运算符。

pep 8 风格指南
提到与单例的比较
应该
None始终使用
isor来完成is not,而不是相等运算符。

当您需要检查一个值是否等于另一个值时,请使用相等运算符(等于==和不等于),例如 !='hi' == 'hi'

使用 时is,我们检查值是否是同一个对象(内存中的相同位置),而不是它们是否相等。

这是一个示例,可以更好地说明检查身份 ( is) 与检查相等性 ( ==)。

主程序
my_first_list = ['a', 'b', 'c'] my_second_list = my_first_list # 👈️ same list as above print(my_first_list is my_second_list) # 👉️ True print(my_first_list == my_second_list) # 👉️ True

我们声明了 2 个存储相同列表的变量。

我们将第二个变量设置为第一个,因此两个变量都指向
list内存中的同一个对象。

现在,让我们创建列表的浅表副本并将其分配给第二个变量。

主程序
my_first_list = ['a', 'b', 'c'] my_second_list = my_first_list.copy() # 👈️ copy created print(my_first_list is my_second_list) # 👉️ False print(my_first_list == my_second_list) # 👉️ True
请注意身份检查失败。尽管这两个列表以相同的顺序存储相同的值,但它们指向内存中的不同位置(它们不是同一个对象)。

当我们使用双等号运算符时,Python 会调用__eq__()对象上的方法。

那就是x==y通话x.__eq__(y)从理论上讲,这种方法可以以一种不可预测的方式实现,因此Noneis操作符相比更直接。

您可以使用id()
函数来获取对象的标识。

主程序
my_first_list = ['a', 'b', 'c'] print(id(my_first_list)) # 👉️ 139944523741504 my_second_list = my_first_list.copy() print(id(my_second_list)) # 👉️ 139944522293184 print(id(my_first_list) == id(my_second_list)) # 👉️ False

该函数返回一个整数,该整数保证在对象的生命周期内是唯一且不变的。

id()函数返回 CPython 中对象在内存中的地址。

如果两个变量引用同一个对象,id()函数将产生相同的结果。

主程序
my_first_list = ['a', 'b', 'c'] print(id(my_first_list)) # 👉️ 140311440685376 my_second_list = my_first_list print(id(my_second_list)) # 👉️ 140311440685376 print(id(my_first_list) == id(my_second_list)) # 👉️ True

向函数传递一个Noneid()总是会返回相同的结果,因为None在 Python 程序中只有一个实例。

主程序
print(id(None)) # 👉️ 9817984 print(id(None)) # 👉️ 9817984

发表评论