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。
核心笔记:布尔值
所有标准对象均可用于布尔测试,同类型的对象之间可以比较大小。每个对象天生具有布尔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。