如何确定一个Pythonvariables的types?

我如何看到一个variables的types,无论是无符号的32位,有符号的16位等?

我如何查看?

Python没有C / C ++types,这似乎是你的问题。

尝试这个:

>>> i = 123 >>> type(i) <type 'int'> >>> type(i) is int True >>> i = 123456789L >>> type(i) <type 'long'> >>> type(i) is long True >>> i = 123.456 >>> type(i) <type 'float'> >>> type(i) is float True 

虽然int和long的区别在Python 3.0中消失了。

您可能正在寻找type()函数。

看下面的例子,但Python中没有像Java那样的“无符号”types。

正整数:

 >>> v = 10 >>> type(v) <type 'int'> 

正整数:

 >>> v = 100000000000000 >>> type(v) <type 'long'> 

负整数:

 >>> v = -10 >>> type(v) <type 'int'> 

文字字符序列:

 >>> v = 'hi' >>> type(v) <type 'str'> 

这是如此简单。 你这样做。

 print(type(variable_name)) 

如何确定Python中的variablestypes?

所以如果你有一个variables,例如:

 one = 1 

你想知道它的types?

有正确的方法和错误的方式来做几乎所有的Python。 这是正确的方法:

使用type

 >>> type(one) <type 'int'> 

您可以使用__name__属性来获取对象的名称。 (这是您需要使用__dunder__名称才能实现的less数几个特殊属性之一 – 在inspect模块中甚至没有它的方法。)

 >>> type(one).__name__ 'int' 

不要使用__class__

在Python中,以下划线开头的名称在语义上不是公共API的一部分,对于用户来说,避免使用它们是最好的做法。 (除非绝对必要)

由于type给我们的对象的类,我们应该避免直接得到这个。 :

 >>> one.__class__ 

这通常是人们在访问方法中的对象types时的第一个想法 – 他们已经在寻找属性,所以types看起来很奇怪。 例如:

 class Foo(object): def foo(self): self.__class__ 

别。 相反,请键入(self):

 class Foo(object): def foo(self): type(self) 

整数和浮点数的实现细节

我如何看到一个variables的types,无论是无符号的32位,有符号的16位等?

在Python中,这些细节是实现细节。 所以,一般来说,我们通常不用担心Python。 但是,要满足你的好奇心

在Python 2中,int通常是一个有符号整数,与实现的字宽相同(受系统限制)。 它通常以C语言实现 。 当整数比这更大时,我们通常将它们转换成Python longs(无限精度,不要与C longs混淆)。

例如,在一个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作为int,它具有无限精度。

我们也可以得到关于Python浮点数的一些信息,这些信息通常在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) 

结论

不要使用__class__ (语义上非公开的API)来获取variables的types。 改用type

不要太担心Python的实现细节。 我没有必要自己处理这个问题。 你可能也不会,如果你真的这样做,你应该知道不应该为这个答案寻找做什么。

还有一种使用__class__

 >>> a = [1, 2, 3, 4] >>> a.__class__ <type 'list'> >>> b = {'key1': 'val1'} >>> b.__class__ <type 'dict'> >>> c = 12 >>> c.__class__ <type 'int'> 

这个问题有些模棱两可 – 我不确定你的意思是“观点”。 如果你试图查询本地Python对象的types, @atzz的答案将引导你正确的方向。

但是,如果您正在尝试生成具有原始Ctypes语义的Python对象(如uint32_tint16_t ),请使用struct模块。 您可以确定给定C型基元中的位数:

 >>> struct.calcsize('c') # char 1 >>> struct.calcsize('h') # short 2 >>> struct.calcsize('i') # int 4 >>> struct.calcsize('l') # long 4 

这也体现在array模块中,它可以使这些低级types的数组:

 >>> array.array('c').itemsize # char 1 

支持的最大整数(Python 2的int )由sys.maxint给出。

 >>> import sys, math >>> math.ceil(math.log(sys.maxint, 2)) + 1 # Signedness 32.0 

还有sys.getsizeof ,它返回剩余内存中Python对象的实际大小:

 >>> a = 5 >>> sys.getsizeof(a) # Residual memory. 12 

对于float数据和精度数据,使用sys.float_info :

 >>> 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) 

你是指在Python或使用ctypes ?

在第一种情况下,你根本不能 – 因为Python没有签名/无符号16/32位整数。

在第二种情况下,可以使用type()

 >>> import ctypes >>> a = ctypes.c_uint() # unsigned int >>> type(a) <class 'ctypes.c_ulong'> 

有关ctypes的更多信息,请参阅官方文档 。

 print type(variable_name) 

在处理这样的问题时,我也强烈推荐IPython交互式解释器。 它可以让你inputvariable_name? 并将返回关于该对象的所有信息列表,包括该types的types和文档string。

例如

 In [9]: var = 123 In [10]: var? Type: int Base Class: <type 'int'> String Form: 123 Namespace: Interactive Docstring: int(x[, base]) -> integer Convert a string or number to an integer, if possible. A floating point argument will be truncated towards zero (this does not include a string representation of a floating point number!) When converting a string, use the optional base. It is an error to supply a base when converting a non-string. If the argument is outside the integer range a long object will be returned instead. 

这可能是无关紧要的。 但是您可以使用isinstance(object, type) ,如上所述。

Python没有你描述的types。 有两种types用于表示整型值: int (它对应于C中的平台inttypes)和long (它是一个任意的精度整数)(即它根据需要增长并且没有上限)。 如果一个expression式产生的结果不能被存储在int int s被默认地转换为long

Python中简单types检查的例子:

 assert type(variable_name) == int assert type(variable_name) == bool assert type(variable_name) == list 

简单,对于Python 3.4及以上

 print (type(variable_name)) 

Python 2.7及以上版本

 print type(variable_name) 

这真的取决于你的意思。 在Python 2.x中,出于历史原因,有两个整型, int (约束到sys.maxint )和long (无限精度)。 在Python代码中,这应该没有什么不同,因为当数字太大时,解释器会自动转换为long。 如果你想知道在底层解释器中使用的实际数据types,那就是依赖于实现的。 (CPython位于Objects / intobject.c和Objects / longobject.c中。)要了解系统types,请查看使用struct模块的cdleary答案。

对于python2.x,请使用

 print type(variable_name) 

对于python3.x,请使用

 print(type(variable_name))