当前位置: 首页 > 面试题库 >

如何正确使用python的isinstance()检查变量是否为数字?

宓英哲
2023-03-14
问题内容

我发现一些旧的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始终启用,并且不再存在longvsint差异,因此在Python
3中始终使用:

NumberTypes = (int, float, complex)

最后但并非最不重要的一点是,您可以使用numbers.Numbers抽象基类型(Python
2.6中的新增功能)还支持不直接从上述类型派生的自定义数字类型:

>>> import numbers
>>> isinstance(var, numbers.Number)
True

此检查也返回Truedecimal.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中的字典? 例如,我希望它循环遍历字典中的值,直到找到字典。然后,循环遍历它找到的那个:

  • 问题内容: 我想检查一个变量是否存在。现在我正在做这样的事情: 是否有其他方法无一例外? 问题答案: 要检查是否存在局部变量: 要检查是否存在全局变量: 要检查对象是否具有属性: