社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

Hekmat • 4 年前 • 1186 次点击  

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

我怎么看?

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

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

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

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

对于python2.x,使用

print type(variable_name)

对于python3.x,使用

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

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

Priyansh
Reply   •   4 楼
Priyansh    6 年前

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

print (type(variable_name))

Python2.7及以上版本

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

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

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

你的意思是说 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    6 年前

这个问题有点模棱两可——我不知道你说的“观点”是什么意思。如果你想 查询 本机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    6 年前

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

anh_ng8
Reply   •   9 楼
anh_ng8    7 年前

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

assert type(variable_name) == int

assert type(variable_name) == bool

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

还有一种方法 __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    5 年前
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    5 年前
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    6 年前

如何确定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    6 年前

太简单了。你这样做。

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

你可能在找 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    15 年前

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之间的区别消失了。