如何确定Python中的变量类型?
因此,如果您有一个变量,例如:
one = 1
你想知道它的类型吗?
在Python中,做任何事情都有正确的方法和错误的方法。这是正确的方法:
使用
type
>>> type(one)
<type 'int'>
你可以使用
__name__
属性获取对象的名称。(这是需要使用
__dunder__
要到达的名称-在
inspect
模块)
>>> type(one).__name__
'int'
不使用
__class__
在Python中,以下划线开头的名称在语义上不是公共API的一部分,用户最好避免使用它们。
(除非绝对必要。)
自从
类型
给我们对象的类,我们应该避免直接得到它。:
>>> one.__class__
这通常是人们在访问方法中的对象类型时的第一个想法——他们已经在寻找属性,所以类型看起来很奇怪。例如:
class Foo(object):
def foo(self):
self.__class__
不要。相反,请键入(self):
class Foo(object):
def foo(self):
type(self)
int和float的实现细节
如何查看变量的类型(无论是无符号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的)long as int
unlimited precision.
我们还可以获得一些关于Python浮动的信息,这些浮动通常被实现为
double
在C中:
>>> 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)
结论
不使用
__阶级__
,一个语义上非公共的API,用于获取变量的类型。使用
类型
相反。
不要太担心Python的实现细节。我不需要自己处理这个问题。你可能也不会,如果你真的这样做了,你应该知道足够多,不要指望这个答案做什么。