所有Python对象都拥有三个特性:
身份:每一个对象都有一个唯一的身份,可以通过内建函数id()得到。可以被认为是该对象的内存地址类型:对象的类型决定了该对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么样的规则。可以通过type()来查看Python对象的类型。type()返回的是个对 象而不是简单的字符串值:对象表示的数据项上面三个特性在对象创建的时候就被赋值,但是除了值之外,其他两个特性都是只读的。(对于新式类型和类,对象的类型也是可以改变的)
对象的值是否可以更改被称为对象的可改变性(mutability)
某些Python对象有属性、值或相关联的可执行代码。Python用句点(.)标记法来访问属性。最常用的属性是函数和方法。
含有数据属性的对象包括(但不限于):类、类实例、模块、复数和文件
标准类型(也被称作“基本数据类型”:Python内建的基本数据类型):
Integer 整型Boolean 布尔型Long intege 长整型Floating point real number 浮点型Complex number 复数型String 字符串List 列表Tuple 元组Dictionary 字典其他内建类型:
类型Null对象(None)文件集合/固定集合函数/方法模块类类型也是对象,类型对象的类型是‘type’(试试type()函数?)
Null对象只有一个值:None(不支持任何运算也没有任何内建方法,没有什么有用的属性,它的布尔值总是False)
所有标准对象都可以用于布尔测试,同类型的对象之间还可以比较大小。
以下对象的布尔值是False:
None;False(布尔类型);所有值为0的数;"":空字符串[]、()、{}:空列表、空元组、空字典 代码对象: 代码对象是便以过得Python源代码片段,是可执行对象。调用内建函数compile()可以得到代码对象。代码对象可以被exec命令或者eval()内建函数执行。代码对象本身不包含任何执行环境信息,是用户自定义函数的核心,在被执行时动态获得上下文。(事实上代码对象是函数的一个属性)一个函数除了代码对象属性以外,还有一些其他函数必须的属性,包括函数名、文档字符串、默认参数及全局命名空间等 帧对象: 帧对象表示Python的执行栈帧。帧对象包含Python解释器在运行时所需要知道的所有信息。 跟踪记录对象: 当异常发生时,一个包含针对异常的栈跟踪信息的跟踪记录对象被创建。如果一个异常有自己的处理程序,处理程序就可以访问这个跟踪记录对象。 切片对象: 当使用Python扩展切片语法时,就会创建切片对象。扩展的切片语法允许对不同的索引切片操作。包括步进切片、多维切片和省略切片。 省略对象: 省略对象用于扩展切片语法中,起记号作用。省略对象有一个唯一的名字Ellipsis,布尔值始终为True XRange对象:调用内建函数xrange()会生成一个Xrange对象,用于需要节省内存使用或range()无法完成的超大数据集场合
Python中多个比较操作可以在同一行进行,求值顺序为从左到右。(比较操作比较的是对象的数值而不是对象本身)
Python中对于对象本身得比较可以使用关键字is和is not来判断两个对象是否指向同一个对象(是否是同一个对象的引用),返回True或者False来指示结果
Python会高效的缓存整型对象和字符串对象(因为它们是不可变对象),所以会造成没有创建新对象的假象。
bool类型中:not拥有最高优先级,只比比较操作符第一级,and和or操作符则相应的再低一级
type(object):接受一个对象,返回它的类型(返回值是一个类型对象,不限于标准对象,自建对象依旧可以)
cmp(obj1,obj2)比较obj1和obj2,前者大返回正整型,相等返回0,前者小返回负整型
str():以字符串的方式获取对象的内容、类型、数值属性等信息。得到的字符串可读性好(无法用eval()求值,对用户友好)
repr():以字符串的方式获取对象的内容、类型、数值属性等信息。得到的字符串通常可以用来重新获得该对象(通常情况下,obj == eval(repr(obj)),对Python友好)
判断对象类型时除了用type返回类型之后在比较,可以通过内建函数isinstance(num,type)来直接返回num的类与type(我们给定的)是否相同。(这里描述暂时不太准确)
[注]:Python2.2统一了类型和类,所有内建类型现在也都是类。
在这基础上,原来所谓内建转换函数像int()、type()、list()等都成了工厂函数,实质上它们是类。当调用它是,实际上是生成了该类型的一个实例,就像工厂生产货物一样
标准类型(全称):基本内建数据对象原始类型
“基本”:是指这些类型都是Python提供的标准或者核心类型“内建”:是由于这些类型是Python默认就提供的“数据”:是因为它们用于一般数据存储“对象”:是因为对象是数据和功能的默认抽象“原始”:是因为这些类型提供的是最底层的粒度数据存储“类型”:是因为他们就是数据类型存储模型:
以这种类型的对象能保存多少个对象为前提进行分类。
能保存单个字面对像的类型,称为原子或标量存储。可容纳多个对象的类型,称之为容器存储(容器对象有时会在文档中被称为符合对象,不仅指类型,还包括类似类实例这样的对象),所有容器对象都能容纳不同类型的对象。、 存储模型 分类Python类型标量/原子类型数值(所有数值类型),字符串(全部是文字)容器类型列表、元组、字典 更新模型: 以这种对象创建成功后,它的值可以进行更新吗?为前提进行分类 更新模型 分类Python类型可变类型列表、字典不可变类型数字、字符串、元组访问模型:
以三种访问方式分类:直接存取、顺序、映射
非容器类型均可直接访问:所有数值类型序列类型指容器内元素按从0开始的索引顺序访问。映射类型指容器内元素无序存放,通过一个唯一的键来访问,容纳的是哈希键-值对的集合访问类型 分类Python类型直接访问数值顺序访问字符串、列表、元组映射访问字典
Python不支持的类型
char或byte:没有保存单一字符的类型,可以直接用长度为1的字符串类型来表示指针:Python替程序员管理指针,因此没必要访问指针(id()得到对象的身份号,这是最接近指针的地址,然而并没什么太大意义),可以理解为Python中一切都是指针(想想对象和对象的引用)int vs short vs long:Python的普通类型相当于标准整型类型(实现了等同C语言的长整型),不需要担心什么,即使数值超出整型的表达范围,Python会自动返回一个长整型而不会报错。float vs double:Python决定不支持单精度浮点类型,如果宁愿放弃更大取值范围而需要更高精度,Python还有一种十进制浮点类型Decimal(拥有任意精度),不过需要导入decimal模块才可以使用它。