从 Python 2.7 迁移到 3.7 - isinstance(obj, None) 与 is None 之间的区别
Migrating from Python 2.7 to 3.7 - difference between isinstance(obj, None) vs is None
我必须将项目从 Python 2.7 迁移到 3.7。
这行代码用于 2.7
if isinstance(obj, None):
出于某种原因,它不再存在了。如果我这样修改:
if isinstance(obj, type(None)):
它会起作用的。
但是我的问题是,这个调用有什么区别:
isinstance(obj, None)
和
obj is None
为什么最初的开发者决定使用 isinstance over is? (在 py 2.7 中)
谢谢。
is
运算符用于检查两个对象是否相同,而 isinstance
用于检查第二个参数是否出现在第一个参数的继承链中的任何位置。
obj is None
obj
实际上是None
.
isinstance(obj, type(None))
检查 obj
是 None 类型的对象。
但实际上只有一个None类型的对象。 None 是 None 类型的唯一对象。所以当你指定None类型时,你写成type(None)
.
毕竟isinstance(None, type(None))
是真的
我必须将项目从 Python 2.7 迁移到 3.7。
这行代码用于 2.7
if isinstance(obj, None):
出于某种原因,它不再存在了。如果我这样修改:
if isinstance(obj, type(None)):
它会起作用的。
但是我的问题是,这个调用有什么区别:
isinstance(obj, None)
和
obj is None
为什么最初的开发者决定使用 isinstance over is? (在 py 2.7 中)
谢谢。
is
运算符用于检查两个对象是否相同,而 isinstance
用于检查第二个参数是否出现在第一个参数的继承链中的任何位置。
obj is None
obj
实际上是None
.
isinstance(obj, type(None))
检查 obj
是 None 类型的对象。
但实际上只有一个None类型的对象。 None 是 None 类型的唯一对象。所以当你指定None类型时,你写成type(None)
.
毕竟isinstance(None, type(None))
是真的