[译]Python 语言参考-3.2. 标准类型层次(上)

928 查看

说明:本系列文章翻译自 Python 3.5.0 官方文档Python 语言参考

下面是一个 Python内建类型的列表。扩展模块(使用 C, Java 或其他语言,根据执行情况)可以定义额外的类型。未来的 Python 版本可能会在类型层次上添加新类型(例如:有理数,高效存储的整型数组,等),通常会以 Python 标准库的形式提供。

有写类型的描述会包含一段“特殊属性”的列表。这些都是提供访问实现的属性,而不作为一般用途。将来它们的定义可能会改变。

None

此类型只有一个值。只有一个对象拥有此值,这个对象可以通过内建的名称None访问。多数情况下,它标识一个不存在的值,例如:当一个函数不明确返回任何值时,可以返回None。它的逻辑值是假。

NotImplemented

此类型只有一个值。只有一个对象拥有此值,这个对象可以通过内建的名称NotImplemented访问。数值型方法和富比较方法如果不实现运算对象提供的运算应该返回此值。(解释器会基于操作符尝试反射运算,或退却[译者注:计算机用语,计算机在发生故障时,即使系统的一部分功能降低但仍能保持主要功能])。它的逻辑值是真。

详细信息请查看算术运算符实现

省略号(Ellipsis)

此类型只有一个值。只有一个对象拥有此值,这个对象可以通过...或内建名称Ellipsis访问。它的逻辑值为真。

numbers.Number

它们由数值型的字面值船舰,并以算术运算符和内置算术函数作为返回结果。数值型对象是不可变的;一旦被创建,它们的值就不会改变。Python 的数字和数学上的数字是强相关,但受限于计算机的呈现能力。

Python 有整数,浮点数和复数三种数字类型

numbers.Integral

代表数学集合中的整数(包括整数和负数)

有两种整数类型:

整型(int)

整型表示无限大小的数字,仅受限于可用的(虚拟)内存。为了移位和掩码操作,我们假设负数使用二进制补码的变种(一串无穷的左边带符号扩展)表示。

布尔型(bool)

布尔型表示值的真假。只有值为TrueFalse的对象才是布尔型。布尔型是整型的了类型,它的值的行为类似于01,例外情况是,在几乎所有的上下文环境中,当把布尔型对象转化为字符串时,会对应的返回FalseTrue

整型表示的原则是,给予移位和掩码操作(包括负数)最有意义的解释。

numbers.Real(float)

代表机器层双精度浮点数。此值受基础机器结构(和 C 或 Java 的实现)可接受范围和溢出处理的约束。Python 不支持单精度浮点数;单精度在进程和内存使用上节省的空间被在 Python 中使用对象的开支抵消,所以没有理由使用两种精度让 Python 变的复杂化。

numbers.Complex(complex)

复数使用一对机器层双精度浮点数表示,与浮点数的说明一致。复数z的实数和虚数部分可以通过z的两个只读属性z.realz.imag访问。

序列(Sequences)

序列表示使用非负整数做为索引的有序集合。 内建函数len()返回一个序列的元素个数。如果一个序列的长度是n,它的索引包含0, 1, ..., n-1。序列a的第i个元素使用a[i]来获取。

序列支持切片:如果索引用k表示,那么a[i:j]得到所有满足i <= k < j的元素。当用在表达式中时,切片也是一个同类型的序列。这意味着索引会从0开始重新编号。

一些序列通过第三个“步”参数支持“扩展切片”:如果索引用x表示,a[i:j:k]得到所有满足x = i + n*k, n >= 0i <= x < j的所有元素。

序列通过可变性区分:

不可变序列

一个不可变的序列类型对象一旦被创建就不能改变。(如果包含其他对象的引用,这些对象可能是可变的并且可能会发生变化;然而,不变对象对这些对象的直接引用是不能改变的。[译者注:看来作者也认为这是个难点啊,文中反复强调这点~~~戳这里看3.1章中的讲解有译者的例子哦~])

以下的类型都是不可变序列:

字符串

字符串代表一序列的 Unicode 码位的值。所有在U+0000~U+10FFFF的码位都可以表示字符串。Python 没有char类型;在字符串中每一个码位都代表一个长度为1的字符串。内建函数ord()将字符串中的每个码位转换成整型,取值范围为0~10FFFFchr()一个取值范围为0~10FFFF的整型转换成长度为1的字符串。str.encode()使用指定编码将一个str转换成bytesbytes.decode()可以实现相反操作。

元组

元组中的元素可以是 Python 中的任意对象。两个以上元素的元组由逗号分隔的表达式(expression,译者注:之所以使用这个词是因为同一个元组中可以存放各种类型的数据,下同)列表组成。一个元素的元组由一个表达式后跟一个逗号组成(单独的一个表达式不能创建一个元组,因为圆括号必须用来组合表达式)。一个空的元组可以用一对圆括号表示。

位元组

位元组对象是一个不可变数组。它的元素占8位字节,用0 <= x < 256范围内的整数表示。位元组字面值(比如:b'abc')和内建函数bytes()可以用来创建位元组对象。位元组对象也可以通过decode()方法解码成字符串。

可变序列

可变序列在被创建后可以改变。下标和切片标记可以被用于分配的目标和del(delete)语句。

存在两个固有的可以序列类型:

列表

列表的元素是任意的 Python 对象。列表由在方括号内用逗号分隔的表达式组成。(0个和1个元素的列表不需要特殊操作。)

字节数组

字节数组是一个可变数组。通过内建函数bytearray()构造器创建。除了是一个可变类型,字节数组另外提供了和不可变位元组对象相同的接口和函数,也因此,字节数组类型具的不可哈希性。

collections模块一样,扩展的array模块提供了附加的可变序列类型的例子.

集合类型

表示无序的,元素唯一的不可变有限集合对象。它们不能使用下标索引。然而,它们可以被迭代,内建函数len()返回集合中的元素个数。集合常被用来全员测试,去重和数学上操作符运算(比如交集,并集,差分,对称差分)。

集合中的元素和字典的键遵守一样的不可变性规则。需要注意,数字类型遵守数字比较的通用规则:两个数字比较结果是相等(比如:11.0),它们中有一个会在集合中保留。

集合有两种固有的类型:

集(Sets)

一个可变集合。通过内建函数set()构造器创建,可以通过一些方法,例如add(),改变它。

冻结集(Frozen sets)

一个不可变集合。通过内建函数frozenset()构造器创建。由于它的不可变性和可哈希性,它可以被用作另一个集合的元素,或字典的键。

映射(Mapping)

表示被任意索引集合索引的有限对象集合。下标a[k]获取到映射a中被k索引的元素;可以用在表达式中,分配给目标或者del语句。内建函数len()返回该映射的元素个数。

映射中只有一种类型:

字典

字典表示被几乎任意值索引的有限对象集合。只有一种类型的值不能作为字典的键:包含列表,字典或其他可变类型的,比较值而不是比较对象身份标识的类型。因为字典的高效要求键的哈希值始终不变。数字类型作为键时遵守普通的数字比较规则:如果两个数字的比较结果是相等(比如:11.0),那么它们都可作为同一个字典内容的索引。

字典是可变的;他们可以通过...符号创建(参考字典显示章节)。

collections模块一样,dbm.ndbmdbm.gnu扩展模块提供了映射类型附加的例子。

请继续阅读:[译]Python 语言参考-3.2. 标准类型层次(下)