数据类型¶
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 中已经将整数和长整数两种类型统一为整数类型。
布尔值 只包括 True 和 False 两个值,分别映射为数值 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