Python中如何判断变量类型?
所以如果你有一个变量,例如:
one = 1
你想知道它的类型吗?
在 Python 中做任何事情都有正确的方法和错误的方法。这是正确的方法:
使用type
>>> type(one)
<type 'int'>
您可以使用__name__ 属性来获取对象的名称。 (这是您需要使用 __dunder__ 名称来获得的少数特殊属性之一 - 在 inspect 模块中甚至没有用于它的方法。)
>>> type(one).__name__
'int'
不要使用__class__
在 Python 中,以下划线开头的名称在语义上不是公共 API 的一部分,用户最好避免使用它们。(绝对必要时除外。)
由于type 为我们提供了对象的类,我们应该避免直接获取它。 :
>>> one.__class__
这通常是人们在方法中访问对象类型时的第一个想法——他们已经在寻找属性,所以类型看起来很奇怪。例如:
class Foo(object):
def foo(self):
self.__class__
不要。相反,做 type(self):
class Foo(object):
def foo(self):
type(self)
整数和浮点数的实现细节
如何查看变量的类型是无符号 32 位、有符号 16 位等?
在 Python 中,这些细节是实现细节。所以,一般来说,我们在 Python 中通常不会担心这个问题。不过,为了满足你的好奇心……
在 Python 2 中,int 通常是一个有符号整数,等于实现的word 宽度(受系统限制)。它通常实现为long in C。当整数大于这个值时,我们通常将它们转换为 Python long(精度不受限制,不要与 C long 混淆)。
例如,在一个 32 位的 Python 2 中,我们可以推断出 int 是一个有符号的 32 位整数:
>>> import sys
>>> format(sys.maxint, '032b')
'01111111111111111111111111111111'
>>> format(-sys.maxint - 1, '032b') # minimum value, see docs.
'-10000000000000000000000000000000'
在 Python 3 中,旧的 int 消失了,我们只使用 (Python's) long as int,它有 unlimited precision.
我们还可以得到一些关于 Python 的浮点数的信息,这些浮点数通常在 C 中实现为double:
>>> sys.float_info
sys.floatinfo(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308,
min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15,
mant_dig=53, epsilon=2.2204460492503131e-16, radix=2, rounds=1)
结论
不要使用__class__,一个语义上非公共的API,来获取变量的类型。请改用type。
而且不用太担心 Python 的实现细节。我不必自己处理这方面的问题。你可能也不会,如果你真的这样做,你应该知道的足够多,不要为了做什么而寻找这个答案。