数据类型

Python 程序中保存的所有数据都是围绕对象这个概念构建的,每个对象都有一个标识、一个类型(也叫作它的类)和一个值。例如,执行 >>> a = 42 时,就会创建一个值为 42 的整数对象,其中,对象的标识可以看作是指向它在内存中所处位置的指针,那么变量 a 就可以看做是这个对象的标识;类型就是整数类型;值就是 42。

对象的类型也称作对象的类,描述了对象的内部表示及它支持的方法与操作。创建特定类型的对象时,有时也将该对象称为该类型的实例。实例被创建之后,它的标识和类型就不可改变。如果某个对象包含对其他对象的引用,则将其称为容器(container)或集合(collection)。

变量

Python 是一种动态类型的语言,在程序执行过程中,变量名会被绑定到不同的值,而且这些值可以属于不同的类型。赋值运算符 = 的作用仅仅是在名称和值之间创建一种关联。尽管每个值都有一个相关类型,如 integer 或 string,但变量名称是无类型的,在执行过程中可以引用任意类型的数据。

变量在赋值以后才会被创建。变量名只能包含字母、数字和下划线,而且不能以数字开头,变量名区分大小写,不能将 Python 定义的关键字用作变量名。例如:

>>> counter = 100              # 整型变量
>>> miles = 1000.0             # 浮点型变量
>>> name = "runoob"            # 字符串
>>> a = b = c = 1              # 多个变量赋值

>>> a, b, c = 1, 2, "runoob"   # 多个变量同时赋值,也叫序列解包

标准数据类型

Python 中大约有十几种内置数据类型,可用于表示程序中的大多数数据。对于表中“类型名称”列内所列出的名称或表达式,可以使用 isinstance() 和其他类型相关函数检查该类型。

类型分类

类型名称

描述

None

None

null 对象

数字

int

整数

float

浮点数

complex

复数

bool

布尔值(True 或 False)

序列

str

字符串

list

列表

tuple

元组

range

创建的整数范围

映射

dict

字典

集合

set

可变集合

frozenset

不可变集合

None 类型

None 类型表示一个 null 对象(没有值的对象)。Python 只提供了一个 null 对象,在程序中表示为 None 。如果一个函数没有显式地返回值,则会返回 None。在编写函数时 None 经常用作可选参数的默认值,以便检测调用者是否为该参数定义了值。None 没有任何属性,在布尔表达式中求值时为 False。

数字类型

Python 使用 3 种数值类型:整数、浮点数以及复数。所有数值类型都是不可变的。除了布尔值之外,所有数字对象都有正负。

整数 具有无限的精度。因为在 Python3 中已经将整数和长整数两种类型统一为整数类型。

布尔值 只包括 TrueFalse 两个值,分别映射为数值 1 和 0。布尔值属于整数的子类型。

Note

在 Python3 中,True 和 False 可以运行所有的数字类型运算,并不会报错。

>>> True + False
1
>>> 9 + True
10
>>> 9 + False
9

浮点数 是用机器上浮点数的原生双精度(64 位)表示的。通常该精度符合 IEEE 754 的要求,提供大约 17 位数的精度和范围从 -308 到 308 的指数。Python 不支持 32 位的单精度浮点数。如果程序需要精确控制空间和数字精度,可以考虑使用 numpy 扩展库。

复数 使用一对浮点数表示,复数 z 的实部和虚部分别使用 z.real 和 z.imag 访问。方法 z.conjugate() 用于计算 z 的复共轭(a+bj 的共轭是 a-bj)。

数值类型拥有许多的属性和方法,旨在简化涉及混合算术的运算。为了更好地与有理数(在 fractions 模块中可以找到)兼容,整数使用了属性 x.numerator 和 x.denominator。为了兼容复数,整数或浮点数 y 拥有属性 y.real 和 y.imag,以及方法 y.conjugate()。使用 y.as_interger_ratio() 可将浮点数 y 转换为表示分数的一对整数。方法 y.is_integer() 用于测试浮点数 y 是否表示整数值。通过方法 y.hex() 和 y.fromhex() 可用低级二进制形式使用浮点数。

库模块中还定义了另外几种数值类型。decimal 模块支持更加泛化的十进制算术。fractions 模块增加了一个有理数类型。

字符串

在 Python 中处理文本数据是使用 str 对象,也称为字符串。 字符串是由 Unicode 码位构成的不可变 序列。

列表

List(列表)是 Python 中使用最频繁的数据类型。列表可以完成大多数集合类的数据结构实现。

元组

元组(tuple)与列表类似,不同之处在于元组的元素不能修改。

集合

集合(set)是由一个或数个形态各异的大小整体组成的,构成集合的事物或对象称作元素或是成员。基本功能是进行成员关系测试和删除重复元素。

字典

字典(dictionary)是 Python 中另一个常用的内置数据类型。

列表是有序的对象集合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。

字典是一种映射类型,字典用 {} 标识,它是一个无序的键(key) : 值(value)对集合。

键(key)必须使用不可变类型。在同一个字典中,键(key)必须是唯一的。

Python 数据类型转换

有时需要对数据类型进行转换,才可以对数据进行相加、相乘或比较等操作。

以下几个内置的函数可以执行数据类型之间的转换。这些函数返回一个新的对象,表示转换的值。

函数

描述

int(x [,base])

将 x 转换为一个整数

float(x)

将 x 转换到一个浮点数

complex(real [,imag])

创建一个复数

str(x)

将 x 转换为字符串

repr(x)

将 x 转换为表达式字符串

eval(str)

用来计算在字符串中的有效 Python 表达式,并返回一个对象

tuple(s)

将序列 s 转换为一个元组

list(s)

将序列 s 转换为一个列表

set(s)

转换为可变集合

dict(d)

创建一个字典。d 必须是一个序列 (key,value)元组。

frozenset(s)

转换为不可变集合

chr(x)

将一个整数转换为一个字符

ord(x)

将一个字符转换为它的整数值

hex(x)

将一个整数转换为一个十六进制字符串

oct(x)

将一个整数转换为一个八进制字符串

判断对象类型

python 内建函数 isinstance() 用来判断对象是否是一个已知的类型,类似 type()。

Note

isinstance() 与 type() 区别:

  • type() 不会认为子类是一种父类类型,不考虑继承关系。

  • isinstance() 会认为子类是一种父类类型,考虑继承关系。

如果要判断两个类型是否相同推荐使用 isinstance()。

以下是 isinstance() 方法的语法:

isinstance(object, classinfo)
  • object – 实例对象。

  • classinfo – 可以是直接或间接类名、基本类型或者由它们组成的元组。

如果对象的类型与参数二的类型(classinfo)相同则返回 True,否则返回 False。

实例

>>>a = 2
>>> isinstance (a,int)
True
>>> isinstance (a,str)
False
>>> isinstance (a,(str,int,list))    # 是元组中的一个返回 True
True