如何在 Python 中将值与 None 进行比较
在 Python 中使用 is
运算符与 None 进行比较,例如 if my_var is None:
。 如果两个值指向同一个对象,is
运算符返回 True(它检查身份),而 double 等于 == 运算符检查两个值是否相等。
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
之类的单例比较应该始终使用 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 个存储相同列表的变量。
我们将第二个变量设置为第一个,因此两个变量都指向内存中的同一个列表对象。
现在,让我们创建列表的浅表副本并将其分配给第二个变量。
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)
。 理论上,这种方法可以以一种不可预知的方式实现,所以用 is
操作符比较 None
更直接。
我们可以使用 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
将 None 值传递给 id()
函数总是会返回相同的结果,因为在 Python 程序中只有一个 None 实例。
print(id(None)) # 👉️ 9817984
print(id(None)) # 👉️ 9817984
相关文章
Python pandas.pivot_table() 函数
发布时间:2024/04/24 浏览次数:82 分类:Python
-
Python Pandas pivot_table()函数通过对数据进行汇总,避免了数据的重复。
在 Python 中将 Pandas 系列的日期时间转换为字符串
发布时间:2024/04/24 浏览次数:894 分类:Python
-
了解如何在 Python 中将 Pandas 系列日期时间转换为字符串
在 Python Pandas 中使用 str.split 将字符串拆分为两个列表列
发布时间:2024/04/24 浏览次数:1124 分类:Python
-
本教程介绍如何使用 pandas str.split() 函数将字符串拆分为两个列表列。
在 Pandas 中将 Timedelta 转换为 Int
发布时间:2024/04/23 浏览次数:231 分类:Python
-
可以使用 Pandas 中的 dt 属性将 timedelta 转换为整数。
Python 中的 Pandas 插入方法
发布时间:2024/04/23 浏览次数:112 分类:Python
-
本教程介绍了如何在 Pandas DataFrame 中使用 insert 方法在 DataFrame 中插入一列。
使用 Python 将 Pandas DataFrame 保存为 HTML
发布时间:2024/04/21 浏览次数:106 分类:Python
-
本教程演示如何将 Pandas DataFrame 转换为 Python 中的 HTML 表格。
如何将 Python 字典转换为 Pandas DataFrame
发布时间:2024/04/20 浏览次数:73 分类:Python
-
本教程演示如何将 python 字典转换为 Pandas DataFrame,例如使用 Pandas DataFrame 构造函数或 from_dict 方法。
如何在 Pandas 中将 DataFrame 列转换为日期时间
发布时间:2024/04/20 浏览次数:101 分类:Python
-
本文介绍如何将 Pandas DataFrame 列转换为 Python 日期时间。