Python社区  »  Python

在Python中执行数学运算时从列表中排除字符串[重复]

Hekmat • 4 月前 • 79 次点击  

如何查看变量的类型(无论是无符号32位、有符号16位等)。?

我怎么看?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/52302
 
79 次点击  
分享到微博
文章 [ 16 ]  |  最新文章 4 月前
Sventimir
Reply   •   1 楼
Sventimir    1 年前

别这么做。要求某种东西的类型本身就是错误的。而是使用多态性。找到或者如果有必要,自己定义一个方法,该方法可以为任何可能的输入类型执行您想要的操作,只需调用它而不询问任何事情。如果需要使用内置类型或由第三方库定义的类型,则始终可以从它们继承并使用自己的派生。或者你可以把它们包装在你自己的班级里。这是解决此类问题的面向对象方法。

如果你坚持要检查确切的类型,并放一些脏的 if 在这里和那里,你可以使用 __class__ 财产或 type 但很快你就会发现自己在更新这些 如果 每两到三次提交额外的案例。使用OO方法可以防止这种情况,并且只允许您为新类型的输入定义一个新类。

WhatsThePoint Prince Dhadwal
Reply   •   2 楼
WhatsThePoint Prince Dhadwal    2 年前

对于python2.x,使用

print type(variable_name)

对于python3.x,使用

print(type(variable_name))
Benjamin Peterson
Reply   •   3 楼
Benjamin Peterson    11 年前

这真的取决于你的意思。在Python2.x中,有两种整数类型, int (受限于 sys.maxint )以及 long (无限精确),出于历史原因。在Python代码中,这不会有什么区别,因为当一个数字太大时,解释器会自动转换为long。如果您想知道底层解释器中使用的实际数据类型,那是依赖于实现的。(CPython位于Objects/intobject.c和Objects/longobject.c)要了解系统类型,请查看cdleary answer以使用struct模块。

Priyansh
Reply   •   4 楼
Priyansh    3 年前

简单,对于Python3.4及更高版本

print (type(variable_name))

Python2.7及以上版本

print type(variable_name)
atzz
Reply   •   5 楼
atzz    11 年前

Python没有您描述的类型。有两种类型用于表示整数值: int ,它对应于C中平台的int类型,并且 long ,这是一个任意精度整数(即,它根据需要增长,并且没有上限)。 内景 s被无声地转换为 长的 如果表达式生成的结果不能存储在 内景 .

Peter Mortensen rob
Reply   •   6 楼
Peter Mortensen rob    7 年前

你的意思是说 Python 或使用 ctypes ?

在第一种情况下,您只是不能-因为Python没有有符号/无符号的16/32位整数。

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

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

有关ctypes(its类型)的更多参考,请参见 the official documentation .

Community cdleary
Reply   •   7 楼
Community cdleary    3 年前

这个问题有点模棱两可——我不知道你说的“观点”是什么意思。如果你想 查询 本机Python对象的类型, @atzz 他的回答会指引你向正确的方向前进。

但是,如果你想 生成 具有原始C类型语义的Python对象(例如 uint32_t , int16_t ),使用 struct 模块。您可以通过以下方法确定给定C类型原语中的位数:

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

这也反映在 array 模块,它可以生成这些较低级别类型的数组:

>>> 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 ,它返回 蟒蛇 剩余内存中的对象:

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

对于浮点数据和精度数据,使用 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)
Community cdleary
Reply   •   8 楼
Community cdleary    3 年前

这可能有点无关紧要。但是你可以用 isinstance(object, type) 如前所述 here .

anh_ng8
Reply   •   9 楼
anh_ng8    3 年前

Python中的简单类型检查示例:

assert type(variable_name) == int

assert type(variable_name) == bool

assert type(variable_name) == list
アレックス
Reply   •   10 楼
アレックス    5 年前

还有一种方法 __class__ :

>>> a = [1, 2, 3, 4]
>>> a.__class__
<type 'list'>
>>> b = {'key1': 'val1'}
>>> b.__class__
<type 'dict'>
>>> c = 12
>>> c.__class__
<type 'int'>
lilhamad
Reply   •   11 楼
lilhamad    1 年前
a = "cool"
type(a)
//result
<class 'str'>

or do `dir(a)` to see the list of inbuilt methods you can have on the variable.
Community cdleary
Reply   •   12 楼
Community cdleary    1 年前
print type(variable_name)

我也强烈推荐 IPython 在处理此类问题时使用交互式口译员。它让你打字 variable_name? 并将返回有关该对象的完整信息列表,包括该类型的类型和文档字符串。

例如

In [9]: var = 123

In [10]: var?
Type:       int
Base Class: <type 'int'>
String Form:    123
Namespace:  Interactive
Docstring:
    int(x[, base]) -> integer

如果可能,将字符串或数字转换为整数。浮点参数将被截断为零(这不包括字符串 浮点数的表示法!)转换字符串时,请使用可选的基。在转换 非字符串。如果参数超出整数范围,则为长对象 将被退回。

Aaron Hall
Reply   •   13 楼
Aaron Hall    2 年前

如何确定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的实现细节。我不需要自己处理这个问题。你可能也不会,如果你真的这样做了,你应该知道足够多,不要指望这个答案做什么。

Dwayne Vaibhav
Reply   •   14 楼
Dwayne Vaibhav    2 年前

太简单了。你这样做。

print(type(variable_name))
Srikanth
Reply   •   15 楼
Srikanth    2 年前

你可能在找 type() 功能。

请参阅下面的示例,但是在Python中没有像Java那样的“unsigned”类型。

正整数:

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

大的 正整数:

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

负整数:

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

文字字符序列:

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

浮点整数:

>>> v = 3.14159
>>> type(v)
<type 'float'>
gregjor
Reply   •   16 楼
gregjor    11 年前

Python没有和C/C++一样的类型,这似乎是你的问题。

试试这个:

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

不过,在Python3.0中,int和long之间的区别消失了。