在 Python 中检查值是否为零或无
Check if a Value is Zero or not None in Python
在 Python 中检查一个值是否为零或 None:
- 使用双等于
==
运算符检查值是否等于0
。 - 使用
is not
运算符检查值是否不是None
。
主程序
my_var = None # ✅ check if not None if my_var is not None: print('variable does NOT store a None value') # ✅ check if 0 if my_var == 0: print('variable stores a 0 value') # ✅ check if zero or not None if my_var == 0 or my_var is not None: print('value is zero or not None')
第一条if
语句检查变量是否不存储None
值。请注意,我们使用is not
运算符来做到这一点。
在第二if
条语句中,我们使用双等号==
运算符来检查变量是否存储0
.
第三条
if
语句检查变量是否存储。如果满足其中一个条件,该块将运行。 0
None
if
is not
当您需要检查变量是否不存储值时,您应该使用运算符None
。
当我们使用is
oris not
时,我们检查对象的身份。
pep 8 风格指南
提到与单例的比较应该
None
始终使用
is
or来完成is not
,而不是相等运算符。
当您需要检查一个值是否等于或不等于另一个值时,请使用相等运算符(等于
==
和不等于),例如。 !=
'a' != 'b'
这是一个示例,可以更好地说明检查身份 ( is
and
is not
) 与检查相等性 ( ==
and !=
)。
主程序
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 会调用__ne__()
对象上的方法。
那就是x!=y
通话x.__ne__(y)
。理论上,此方法可以以不可预测的方式实施,因此None
使用is
andis not
运算符进行检查更为直接。
您可以使用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()
总是会返回相同的结果,因为None
在 Python 程序中只有一个实例。
主程序
print(id(None)) # 👉️ 9817984 print(id(None)) # 👉️ 9817984
您可能还会在网上看到检查真实性和虚假性的示例。
主程序
my_var = None # 👇️ checks if variable stores a falsy value if not my_var: # 👇️ this runs print('variable is falsy') # 👇️ checks if variable stores a truthy value if my_var: print('variable is truthy')
但是,这与显式检查变量是否不存储
None
值有很大不同,因为还有许多其他不存在的虚假值None
。所有不真实的值都被认为是虚假的。Python 中的虚假值是:
- 定义为 falsy 的常量:
None
和False
. 0
任何数字类型的(零)- 空序列和集合:(
""
空字符串),()
(空元组),[]
(空列表),{}
(空字典),set()
(空集),range(0)
(空范围)。
如果您检查一个变量是否为假值,您就是在检查该变量是否为上述任何一个假值(不仅仅是None
)。