4.3 其他内建类型

  • 类型

  • Null对象(None)

  • 文件

  • 集合/固定集合

  • 函数/方法

  • 模块

这些是当你做Python开发时可能会用到的一些数据类型。我们在这里讨论Type和None类型的使用,除此之外的其他类型将在其他章节中讨论。

4.3.1 类型对象和type类型对象

在本章我们要讨论所有的Python类型,虽然看上去把类型本身也当成对象有点特别,我们还是要在这里提一提。你一定还记得,对象的一系列固有行为和特性(比如支持哪些运算,具有哪些方法)必须事先定义好。从这个角度看,类型正是保存这些信息的最佳位置。描述一种类型所需要的信息不可能用一个字符串来搞定,所以类型不能是一个简单的字符串,这些信息不能也不应该和数据保存在一起,所以我们将类型定义成对象。

下面我们来正式介绍内建函数type()。通过调用type()函数你能够得到特定对象的类型信息。

>> type (42)

<type ‘int’>

我们仔细研究一下这个例子,请注意看type函数有趣的返回值。我们得到一个简洁的输出结果<type‘int’>。不过你应当意识到它并不是一个简单地告诉你42是个整型的字符串。你看到的<type‘int’>实际上是一个类型对象,碰巧它输出了一个字符串来告诉你它是个int型对象。

现在你该问自己了,那么类型对象的类型是什么?来,我们试验一下。

>>type(type(42))

<type ‘type’>

没错,所有类型对象的类型都是type,它也是所有Python类型的根和所有Python标准类的默认元类(metadass)。你现在有点搞不明白,没关系,随着我们逐步深入地学习类和类型,你就会慢慢理解。

随着Python 2.2中类型和类的统一,类型对象在面向对象编程和日常对象使用中扮演着更加重要的角色。从现在起,类就是类型,实例是对应类型的对象。

4.3.2 None——Python的 Null对象

Python有一个特殊的类型,被称为Null对象或者NoneType,它只有一个值,那就是None。它不支持任何运算也没有任何内建方法。如果非常熟悉C语言,就会知道和None类型最接近的C类型就是 void, None类型的值和C的NULL值非常相似(其他类似的对象和值包括Perl的undef和Java的void类型和null值)。

None没有什么有用的属性,它的布尔值总是False。

4.3 其他内建类型 - 图1核心笔记:布尔值

所有标准对象均可用于布尔测试,同类型的对象之间可以比较大小。每个对象天生具有布尔True或False值。空对象、值为零的任何数字或者Null对象None的布尔值都是False。

下列对象的布尔值是False。

  • None;

  • False (布尔类型);

  • 所有的值为零的数;

  • 0 (整型);

  • 0.0 (浮点型);

  • 0L (长整型);

  • 0.0+0.0j (复数);

  • “”(空字符串);

  • [](空列表);

  • ()(空元组);

  • {}(空字典)。

值不是上面列出来的任何值的对象的布尔值都是True,例如non-empty、non-zero等。用户创建的类实例如果定义了 nonzero(nonzero())或length(len())且值为0,那么它们的布尔值就是False。