如何查看变量的类型?(例如无符号32位)
当前回答
Python没有您所描述的类型。有两种类型用于表示整数值:int,它对应于C中平台的int类型;long,它是一个任意精度的整数(即,它根据需要增长,没有上限)。如果表达式产生的结果无法存储在int中,则int将被无声地转换为long。
其他回答
这取决于你的意思。在Python2.x中,由于历史原因,有两种整数类型,int(限制为sys.maxint)和long(无限精度)。在Python代码中,这不会有什么区别,因为当数字太大时,解释器会自动转换为long。如果您想了解底层解释器中使用的实际数据类型,这取决于实现。(CPython位于Objects/intobject.c和Objects/longobject.c中)要了解系统类型,请查看使用结构模块的cdleary答案。
你的意思是用Python还是用ctypes?
在第一种情况下,您根本不可能——因为Python没有带符号/无符号的16/32位整数。
在第二种情况下,可以使用type():
>>> import ctypes
>>> a = ctypes.c_uint() # unsigned int
>>> type(a)
<class 'ctypes.c_ulong'>
有关ctypes及其类型的更多参考信息,请参阅官方文档。
Python是一种动态类型语言。最初创建为字符串的变量可以稍后重新分配为整数或浮点。翻译不会抱怨:
name = "AnyValue"
# Dynamically typed language lets you do this:
name = 21
name = None
name = Exception()
要检查变量的类型,可以使用type()或isinstance()内置函数。让我们看看他们的行动:
Python3示例:
variable = "hello_world"
print(type(variable) is str) # True
print(isinstance(variable, str)) # True
让我们比较两种方法在python3中的性能
python3 -m timeit -s "variable = 'hello_world'" "type(variable) is int"
5000000 loops, best of 5: 54.5 nsec per loop
python3 -m timeit -s "variable = 'hello_world'" "isinstance(variable, str)"
10000000 loops, best of 5: 39.2 nsec per loop
类型大约慢40%(54.5/39.2=1.390)。
我们可以改用type(variable)==str。这会奏效,但这是个坏主意:
要检查变量的值时,应使用==。我们将使用它来查看变量的值是否等于“hello_world”。但是当我们要检查变量是否为字符串时,运算符是否更合适。有关何时使用其中一个或另一个的更详细说明,请查看本文。==更慢:python3-m timeit-s“variable='hello_world'”“type(variable)==str”5000000个循环,每个循环最好为5:64.4 nsec
身份和类型的区别
速度并不是这两种功能之间的唯一区别。实际上,它们的工作方式有一个重要区别:
type只返回对象的类型(它是类)。我们可以使用它来检查变量的类型是否为str。isinstance检查给定对象(第一个参数)是否为:指定为第二个参数的类的实例。例如,变量是str类的实例吗?或指定为第二参数的类的子类的实例。换句话说,变量是str子类的实例吗?
这在实践中意味着什么?假设我们希望有一个自定义类充当列表,但有一些其他方法。因此,我们可以对列表类型进行子类化,并在其中添加自定义函数:
class MyAwesomeList(list):
# Add additional functions here
pass
但是现在,如果我们将这个新类与列表进行比较,则类型和isinstance返回不同的结果!
my_list = MyAwesomeList()
print(type(my_list) is list) # False
print(isinstance(my_list, list)) # True
我们得到不同的结果,因为isinstance检查my_list是列表的一个实例(不是)还是列表的一个子类(因为MyAwesomeList是列表的子类)。如果您忘记了这一差异,它可能会导致代码中出现一些细微的错误。
结论
isinstance通常是比较类型的首选方式。它不仅速度更快,而且考虑了继承,这通常是所需的行为。在Python中,您通常希望检查给定对象的行为是否像字符串或列表,而不一定是字符串。所以,不用检查字符串及其所有自定义子类,只需使用isinstance即可。
另一方面,当您想要显式检查给定变量是否为特定类型(而不是其子类)时,请使用类型。当您使用它时,请这样使用:type(var)is some_type not like this:type(var)==some_type。
对于python2.x,请使用
print type(variable_name)
对于python3.x,请使用
print(type(variable_name))
python中有许多数据类型,如:
Text Type: str
Numeric Types: int, float, complex
Sequence Types: list, tuple, range
Mapping Type: dict
Set Types: set, frozenset
Boolean Type: bool
Binary Types: bytes, bytearray, memoryview
None Type: NoneType
在这里,我写了一个代码,其中有一个包含所有类型数据类型的列表示例,并打印它们的类型
L = [
"Hello World",
20,
20.5,
1j,
["apple", "banana", "cherry"],
("apple", "banana", "cherry"),
range(6),
{"name" : "John", "age" : 36},
{"apple", "banana", "cherry"},
frozenset({"apple", "banana", "cherry"}),
True,
b"Hello",
bytearray(5),
memoryview(bytes(5)),
None
]
for _ in range(len(L)):
print(type(L[_]))
输出:
<class 'str'>
<class 'int'>
<class 'float'>
<class 'complex'>
<class 'list'>
<class 'tuple'>
<class 'range'>
<class 'dict'>
<class 'set'>
<class 'frozenset'>
<class 'bool'>
<class 'bytes'>
<class 'bytearray'>
<class 'memoryview'>
<class 'NoneType'>
推荐文章
- 数据类vs类型。NamedTuple主要用例
- 如何从macOS完全卸载蟒蛇
- 是否有可能键入提示一个lambda函数?
- 'dict'对象没有has_key属性
- 使用Pandas groupby连接来自几行的字符串
- Pandas:给定列的数据帧行之和
- 如何避免在为Python项目构建Docker映像时重新安装包?
- 如何激活蟒蛇环境
- 省略[…]意思是在一个列表里?
- 为什么我得到“'str'对象没有属性'读取'”当尝试使用' json。载入字符串?
- 不区分大小写的列表排序,没有降低结果?
- 排序后的语法(key=lambda:…)
- 在烧瓶中返回HTTP状态代码201
- c++ auto关键字。为什么它是魔法?
- 使用python创建一个简单的XML文件