本章内容:
Python对象
內建类型
标准类型操作符
值的比较
对象身份比较
布尔类型
标准类型內建函数
标准类型总览
各种类型
不支持的类型
Python对象
所有Python对象都有三个特性:身份,类型和值
身份:唯一的身份标识,对象的内存地址,内建函数id()可以得到。(极少用到) 只读
类型:对象的类型决定该对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么样的规则。內建函数type()查看对象的类型,因为在python中类型也是对象,所以type()返回的是对象而不是简单的字符串。 只读
值:对象表示的数据项
对象属性:python用句点(.)标记法来访问属性。最常用的属性是函数和方法, 也有一些python类型也有数据属性,含有数据属性的 对象包括:类,类实例,模块,复数和文件
标准类型
数字
Integer 整型
Boolean 布尔型
Long integer 长整型
Floathing point real number 浮点型
Complex number 复数型
String 字符串
List 列表
Tuple 元组
Dictionary 字典
其他內建类型:
类型
Null对象
文件
集合/固定集合
函数/方法
模块
类
类型对象和type类型对象
>>> type(42)
<type ‘int‘>
>>> type(type(42))
<type ‘type‘> 所有类型对象的类型是type 默认元类
None------Python的Null对象
Null对象或者NoneType只有一个值None,它不支持任何运算也没有任何內建方法。None没有什么有用的属性,它的布尔值总是False
对象的布尔值是False: None False 所有的值为零的数 0(整型)0.0(浮点型)0L(长整型) 0.0+0.0J(复数)“ ”(空字符串)[ ](空列表)( )(空元组){ }(空字典)
内部类型
代码,帧,跟踪记录,切片,省略,Xrange
代码对象:
代码对象是编译过的python源代码片段,它是可执行对象。通过调用內建函数compile()可以得到代码对象。代码对象可以被exec命令或eval()內建函数执行
代码对象是函数的一个属性
帧对象:
帧对象表示Python的执行栈帧。每次函数调用产生一个帧,每一个帧对象都会相应创建一个C栈帧。用到帧对象的一个地方是跟踪记录对象
跟踪记录对象:
当异常发生时,一个包含针对异常的栈跟踪信息的跟踪记录对象被创建。如果一个异常有自己的处理程序,处理程序就可以访问这个跟踪记录对象。
切片对象:
当使用python扩展的切片语法时,会创建切片对象。
切片语法允许对不同的索引切片操作,包括步进切片、多维切片和省略切片。
多维切片语法: sequence[start1:end1,start2:end2]或使用省略sequence[...,start1:end1],也可以由內建函数slice()来生成
步进切片:sequence[起始索引:结束索引:步进值]
>>> foostr = ‘abcde‘
>>> foostr[::-1]
‘edcba‘
>>> foostr[::-2]
‘eca‘
>>> foolist = [123,‘xba‘,342.23,‘abc‘]
>>> foolist[::-1]
[‘abc‘, 342.23, ‘xba‘, 123]
省略对象:
XRange对象:
调用內建函数xrange()会生成一个xrange对象。是range的兄弟版,用于需要节省内存使用或range()无法完成的超大数据集场合。
标准类型操作符
对象值的比较
>>> 2 == 2
True
>>> 2.46 <= 8.33
True
>>> ‘abc‘ == ‘xyz‘
False
>>> 3 < 4 < 7
True
>>> 4 > 3 == 3
True
>>> 4 < 3 < 5 != 2 < 7
False
比较操作是比较的对象的数值而不是对象本身
标准类型值比较操作符:
expr1 < expr2 ; expr1小于expr2
expr1 > expr2 ; expr1大于expr2
expr1 <= expr2 ; expr1小于等于expr2
expr1 >= expr2 ; expr1大于等于expr2
expr1 == expr2 ; expr1等于expr2
expr1 != expr2 ; expr1不等于expr2
expr1 <> expr2 ; expr1不等于expr2
对象身份比较:
对象可以赋值到另一个变量,因为每个变量都指向同一个数据对象,只要任何一个引用发生改变,该对象的其他引用也会随之改变
foo1和foo2指向相同的对象
foo1 = foo2 = 4.3
foo1 = 4.3
foo2 = foo1
foo1和foo2指向不同的对象
foo1 = 4.3
foo2 = 1.3 + 3.0
测试俩个变量是否指向同一个对象:
a is b
id(a) == id(b)
>>> a = [ 5,‘hat‘,-9.3]
>>> b = a
>>> a is b
True
>>> a is not b
False
>>> b = 2.5e-5
>>> b
2.5e-05
>>> a
[5, ‘hat‘, -9.3]
>>> a is b
False
>>> a is not b
True
标准类型对象身份比较操作符
obj1 is obj2 ;obj1和obj2是同一个对象
obj1 is not obj2 ;obj1和obj2不是同一个对象
布尔类型
标准类型布尔操作符
not expr ;expr的逻辑非
expr1 and expr2 ;expr1和expr2的逻辑与
expr1 or expr2 ;expr1和expr2的逻辑或
标准类型內建函数
cmp(obj1,obj2) 比较obj1和obj2,根据比较结果返回整型i:
i < 0 if obj1 < obj2
i > 0 if obj1 > obj2
i == 0 if obj1 == obj2
repr(obj) 或 `obj` 返回一个对象的字符串表示
str(obj) 返回对象适合可读性好的字符串表示
type(obj) 得到一个对象的类型,并返回相应的type对象 type(object)
存储模型分类:
标量/原子类型 数值,字符串
容器类型 列表、元组、字典
更新模型:
可变类型 列表,字典
不可变类型 数字,字符串,元组
访问类型
直接访问 数字
顺序访问 字符串、列表、元组
映射访问 字典