一、Python使用对象模型来存储数据
Python对象有三个特性:
- 身份:任一对象的身份可以使用内建函数 id() 来获得。
- 类型:可用内建函数 type() 查看。(type返回的是对象,而不是字符串)
- 值:对象表示的数据值。
【1、2:只读; 3:可写】
Python对象的常用属性:函数和方法
- 含有数据属性的对象包括(但不限于):类、类实例、模块、复数、文件……
二、标准类型 (也叫“基本数据类型”)
类型 | Type |
---|---|
数字 | Integer、Long、Float、Complex |
布尔型 | Boolean |
字符串 | String |
列表 | List |
元组 | Tupple |
字典 | Dictionary |
布尔值:
- 同类型的对象之间可以比较大小
- 每个对象天生都有布尔值(True 或 False)
- 空对象、值为零的任何数字对象、Null对象,布尔值都为False
标准类型操作符:
(1)对象值得比较:==、<=、>=、>、<、!=、<>
(2)对象身份比较:
对象可以被赋值到另一个变量(通过引用)
因为每个变量都指向同一个(共享的)数据对象,只要任何一个引用发生改变,该对象的其他引用也会随之而变。
foo1 = foo2 = 4.3 # 实质:一个值为4.3的数字被创建,然后该对象被引用(foo1和foo2指向同一个对象)
foo1 = 4.3 # (foo1和foo2指向同一个对象)
foo2 = foo1
foo1 = 4.3 # (foo1和foo2指向不同的对象)
foo2 = 1.3 + 3.0
Python中提供了 is 和 is not 操作符来测试两个变量是否指向同一个对象。
eg: a is b <=> id(a) == id(b)
Python中,整型和字符串对象为不可变对象。
(3)布尔类型:and、or、not (与、或、非)
标准类型内建函数:
函数 | 描述 |
---|---|
cmp(obj1, obj2) | 比较 obj1 和 obj2,返回-1、0、1 |
repr(obj) 或 ‘obj’ | 返回 obj 的字符串表示 |
str(obj) | 返回对象适合可读性号的字符串表示 |
type(obj) | 得到一个对象的类型,并返回相应的 type 对象 |
注:repr(obj) 输出,对Python比较友好;
而 str(obj) 输出对用户比较友好
type() 和 isinstance():
class Foo:
pass
foo = Foo()
class Bar(object):
pass
bar = Bar()
type(Foo) # <type, 'classobj'>
type(foo) # <type, 'instance'>
type(Bar) # <type, 'type'>
type(bar) # <type, '__main__.Bar'>
import types
types.IntType # <type, 'int'>
eg1:if type(59) is types.IntType:
eg2:if isinstance(59, (int, long, float)):
类型工厂函数:(实质上是类),在调用时,实际上生成了该类型的一个实例。
int()
long()
float()
complex()
str()
unicode()
basestring()
list()
tuple()
type()
dict()
bool()
set() / frozenset()
object()
classmethod()
staticmethod()
super()
property()
file()
三、其他内建类型
类型 | Type |
---|---|
Null对象 | None |
文件 | File |
集合、固定集合 | |
函数、方法 | function |
模块 | module |
类 | class |
四、内部类型(程序员一般不会直接与其打交道)
类型 | 描述 |
---|---|
代码 | 可执行对象 (可用内建函数 complex() 得到代码对象) |
帧 | Python的执行帧栈 |
跟踪记录 | 异常发生时,一个包含异常的栈跟踪信息的跟踪记录对象被创建 |
切片 | |
省略 | 用于扩展切片语法中,起记号作用 (有一个唯一的名字:Ellipsis) 始终为True |
Xrange | range() 的兄弟版本 |
五、标准类型的分类(即,基本内建数据对象原始类型)
模型 | 分类 | Python类型 |
---|---|---|
存储模型 | 标准 / 原子类型 | 数值、字符串 |
容器类型 | 列表、元组、字典 | |
更新模型 | 可变类型 | 列表、字典 |
不可变类型 | 数字、字符串、元组 | |
访问模型 | 直接访问 | 数字 |
顺序访问 | 字符串、列表、元组 | |
映射访问 | 字典 |