我发现一些旧的Python代码正在执行以下操作:
if type(var) is type(1):
...
不出所料,pep8
有人抱怨建议使用isinstance()
。
现在的问题是,该numbers
模块已添加到Python 2.6中,我需要编写适用于Python 2.5+的代码
所以if isinstance(var, Numbers.number)
不是解决方案。
在这种情况下,哪种解决方案合适?
在Python 2中,您可以使用types
模块:
>>> import types
>>> var = 1
>>> NumberTypes = (types.IntType, types.LongType, types.FloatType, types.ComplexType)
>>> isinstance(var, NumberTypes)
True
请注意使用元组来测试多种类型。
在幕后,IntType
只是的别名int
,等等:
>>> isinstance(var, (int, long, float, complex))
True
该complex
类型要求您的python编译时支持复数;如果要对此进行保护,请使用try / except块:
>>> try:
... NumberTypes = (types.IntType, types.LongType, types.FloatType, types.ComplexType)
... except AttributeError:
... # No support for complex numbers compiled
... NumberTypes = (types.IntType, types.LongType, types.FloatType)
...
或者,如果您直接使用类型:
>>> try:
... NumberTypes = (int, long, float, complex)
... except NameError:
... # No support for complex numbers compiled
... NumberTypes = (int, long, float)
...
在Python 3中types
不再具有任何标准类型别名,complex
始终启用,并且不再存在long
vsint
差异,因此在Python
3中始终使用:
NumberTypes = (int, float, complex)
最后但并非最不重要的一点是,您可以使用numbers.Numbers
抽象基类型(Python
2.6中的新增功能)还支持不直接从上述类型派生的自定义数字类型:
>>> import numbers
>>> isinstance(var, numbers.Number)
True
此检查也返回True
了decimal.Decimal()
和fractions.Fraction()
对象。
该模块确实假定complex
已启用该类型。如果不是,则会出现导入错误。
问题内容: 如何检查变量是否为整数? 问题答案: 如果你需要这样做,请执行 除非你使用的是Python 2.x,否则需要 不要使用type。在Python中,这几乎永远不是正确的答案,因为它阻止了多态性的所有灵活性。例如,如果你子类化int,则你的新类应注册为int,但type不会这样做: 这符合Python强大的多态性:你应该允许行为类似于的任何对象int,而不是强制将其作为一个对象。 BUT
问题内容: 我想知道如何检查变量是否是类(不是实例!)。 我试图使用该函数来执行此操作,但我不知道类将具有哪种类型。 例如,在以下代码中 我试图用 ??? 代替“ ” ,但我意识到这是python中的关键字。 问题答案: 更好的是:使用该功能。
问题内容: 我有一个变量,我想知道它是否指向一个函数。 我曾希望我可以做些类似的事情: 但这给了我: 我选择的原因是 问题答案: 如果这是用于Python 2.x或Python 3.2+,则也可以使用。它曾经不推荐使用,但是现在不推荐使用,因此你可以再次使用它。你可以在此处阅读讨论内容:http : //bugs.python.org/issue10518。你可以执行以下操作: 如果这是针对Pyt
问题内容: 您如何检查变量是否是python中的字典? 例如,我希望它遍历字典中的值,直到找到字典为止。然后,遍历找到的内容: 问题答案: 如果使用子类,则可以使用或可以使用的方法:
如何检查变量是否是Python中的字典? 例如,我希望它循环遍历字典中的值,直到找到字典。然后,循环遍历它找到的那个:
问题内容: 我想检查一个变量是否存在。现在我正在做这样的事情: 是否有其他方法无一例外? 问题答案: 要检查是否存在局部变量: 要检查是否存在全局变量: 要检查对象是否具有属性: