gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 21:33:51 29 4
gpt4 key购买 nike

我发现一些旧的 Python 代码正在执行以下操作:

if type(var) is type(1):
...

正如预期的那样,pep8 提示这种推荐使用 isinstance()

现在,问题是 Python 2.6 中添加了 numbers 模块,我需要编写适用于 Python 2.5+ 的代码

所以 if isinstance(var, Numbers.number) 不是解决方案。

在这种情况下,哪个是正确的解决方案?

最佳答案

在 Python 2 中,您可以使用 types module :

>>> 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 block :

>>> 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 >int 的区别,所以在 Python 3 中总是使用:

NumberTypes = (int, float, complex)

最后但同样重要的是,您可以使用 numbers.Numbers abstract base type (Python 2.6 中的新功能)还支持不直接从上述类型派生的自定义数字类型:

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

此检查还为 decimal.Decimal()fractions.Fraction() 对象返回 True

该模块确实假设启用了 complex 类型;如果不是,您将收到导入错误。

关于python - 如何正确使用 python 的 isinstance() 检查变量是否为数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11204789/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com