如何确定 Python 变量的类型?

问:

如何查看变量的类型? (例如无符号 32 位)

答1:

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

使用 type() 内置函数:

>>> i = 123
>>> type(i)

>>> type(i) is int
True
>>> i = 123.456
>>> type(i)

>>> type(i) is float
True

要检查变量是否属于给定类型,请使用 isinstance:

>>> i = 123
>>> isinstance(i, int)
True
>>> isinstance(i, (float, str, set, dict))
False

请注意,Python 的类型与 C/C++ 不同,这似乎是您的问题。

需要注意的一点(因为问题是关于数字的) - bool 是 int 的子类。所以 isinstance(True, int) 或 isinstance(False, int) 将返回 True。

答2:

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

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

请参阅下面的示例,但 Python 中没有像 Java 那样的“无符号”类型。

正整数:

>>> v = 10
>>> type(v)


大正整数:

>>> v = 100000000000000
>>> type(v)


负整数:

>>> v = -10
>>> type(v)


字面字符序列:

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


浮点整数:

>>> v = 3.14159
>>> type(v)


当我看到这个时,我不得不加倍接受。 Java SE8 现在包含无符号整数,我已经用它开发了很多东西,以至于 Java 在 SE8 之前从未有过无符号整数似乎是有罪的。

答3:

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

就是这么简单。你这样做。

print(type(variable_name))

答4:

huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式

如何确定 Python 中的变量类型?

因此,如果您有一个变量,例如:

one = 1

你想知道它的类型吗?

在 Python 中做任何事情都有正确的方法和错误的方法。这是正确的方法:

使用类型

>>> type(one)


您可以使用 name 属性来获取对象的名称。 (这是您需要使用 dunder 名称来获得的少数特殊属性之一 - inspect 模块中甚至没有它的方法。)

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

不要使用 class

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

由于 type 为我们提供了对象的类,我们应该避免直接获取它。 :

>>> one.__class__

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

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

不。相反,做类型(自我):

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

整数和浮点数的实现细节

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

在 Python 中,这些细节是实现细节。所以,一般来说,我们在 Python 中通常不会担心这个问题。不过,为了满足你的好奇心…

在 Python 2 中,int 通常是一个有符号整数,等于实现的 word 宽度(受系统限制)。它通常实现为 long in C。当整数变得比这更大时,我们通常将它们转换为 Python 长整数(精度不受限制,不要与 C 长整数混淆)。

例如,在 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 的实现细节。我不必自己处理这方面的问题。你可能也不会,如果你真的这样做,你应该知道足够多,不要寻找这个答案来做什么。

答5:

huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式

print type(variable_name)

在处理此类问题时,我还强烈推荐使用 IPython 交互式解释器。它允许您键入 variable_name? 并将返回有关对象的完整信息列表,包括类型和该类型的文档字符串。

例如

In [9]: var = 123

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

如果可能,将字符串或数字转换为整数。浮点参数将被截断为零(这不包括浮点数的字符串表示形式!)转换字符串时,请使用可选的基数。转换非字符串时提供基数是错误的。如果参数超出整数范围,则会返回一个 long 对象。

我要求无符号整数,有符号整数等

print type(str) 在 Python 3.6 中返回错误。使用type(str)

@KolobCanyon 那是因为在 3.x 中, print 需要括号:print(type(str))

您确实应该修改 print type(var) 错误代码。

答6:

huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感

a = "cool"
type(a)

//result 'str'

or 
do 
`dir(a)` 
to see the list of inbuilt methods you can have on the variable.

答7:

huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!

使用 class 的另一种方法:

>>> a = [1, 2, 3, 4]
>>> a.__class__

>>> b = {'key1': 'val1'}
>>> b.__class__

>>> c = 12
>>> c.__class__


re: comment "names that start with underscores..."(单)下划线与双下划线(“dunders”)非常不同,它们绝对是公共 API 的一部分,当然可以使用它们。这可能会有所帮助... youtu.be/wf-BqAjZb8M

答8:

huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式

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

assert type(variable_name) == int

assert type(variable_name) == bool

assert type(variable_name) == list

这应该是公认的答案,因为它显示了如何实际使用返回的值。没有人关心在终端中看到 type() 的结果,我们希望它进行类型检查,但具体方法并不明显(我假设您必须将类型作为字符串进行比较:if (type(var)=='str'):)

答9:

与HuntsBot一起,探索全球自由职业机会–huntsbot.com

这可能无关紧要。但您可以使用 isinstance(object, type) 检查对象的类型,如提到的 here。

huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感

我认为这比在检查过程中使用的类型函数要好得多。如果你想检查结果并采取行动,你必须使用 try catch with type 但 isinstance 返回 true 或 false

答10:

huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感

这个问题有点模棱两可——我不确定你所说的“视图”是什么意思。如果您尝试查询原生 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,它返回 Python 对象在剩余内存中的实际大小:

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

据我了解,这个问题询问有关在 Python 中查询“变量”的类型。您的回答通常是正确的,但题外话。

答11:

huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式

您是指在 Python 中还是使用 ctypes?

在第一种情况下,您根本不能——因为 Python 没有带符号/无符号的 16/32 位整数。

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

>>> import ctypes
>>> a = ctypes.c_uint() # unsigned int
>>> type(a)


有关 ctypes 及其类型的更多参考,请参阅 the official documentation。

原文链接:https://www.huntsbot.com/qa/3VgJ/how-to-determine-a-python-variables-type?lang=zh_CN&from=csdn

huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!

你可能感兴趣的:(java,开发语言,rxjava,selenium,bash)