【发布时间】:2013-06-16 09:56:24
【问题描述】:
在 Python 中,您有 None 单例,在某些情况下它的行为非常奇怪:
>>> a = None
>>> type(a)
<type 'NoneType'>
>>> isinstance(a,None)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: isinstance() arg 2 must be a class, type, or tuple of classes and types
首先,<type 'NoneType'> 显示 None 不是类型,但 NoneType 是。然而,当您运行 isinstance(a,NoneType) 时,它会返回错误:NameError: name 'NoneType' is not defined
现在,鉴于此,如果您有一个输入默认设置为 None 的函数,并且需要检查,您可以执行以下操作:
if variable is None:
#do something
else:
#do something
我不能执行以下操作的原因是什么:
if isinstance(variable,None): #or NoneType
#do something
else:
#do something
我只是在寻找详细的解释,以便更好地理解这一点
编辑:好的应用程序
假设我想使用isinstance,以便在variable 是多种类型(包括None)时可以做一些事情:
if isinstance(variable,(None,str,float)):
#do something
【问题讨论】:
-
if variable == None是反惯用的 Python。执行此测试的标准方法是利用None是单例的事实:改用if variable is None。
标签: python python-2.7 python-3.x types