python核心编程笔记(2)

chp4 笔记 python 对象

1.python对象的三个特性:身份(内建函数 id()),类型(内建函数 type())和值



2.对象属性:方法,函数,数据属性(注意区别方法和函数)


3.基本数据类型:数字,整型,布尔型,长整型,浮点型,复数型,字符串,列表,元组,字典
  其他内建类型:类型(type),Null对象(None),文件(File),集合/固定集合(Set/Frozenset),函数/方法(Function/Method),模块(Module),类(Class)
  
4.所有类型对象的类型都是 type,它也是所有 Python 类型的根和所有 Python 标准类的默认元类(metaclass)


5.布尔值为False的有:None,False,所有的值为零的数(整型0,浮点型0,长整型0l,复数型0.0+0.0j,空字符串"",空列表[],空元组(),空字典{})
  除以上未列出的对象,其他的都是True


6.代码对象:代码对象是编译过的 Python 源代码片段,它是可执行对象。通过调用内建函数 compile()可以得到代码对象。代码对象可以被 exec 命令或 eval()内建函数来执行。代码对象本身不包含任何执行环境信息, 它是用户自定义函数的核心, 在被执行时动态获得上下文。(事实上代码对象是函数的一个属性)一个函数除了有代码对象属性以外,还有一些其它函数必须的属性,包括函数名,文档字符串,默认参数,及全局命名空间等等。


7.帧对象:帧对象包含 Python 解释器在运行时所需要知道的所有信息。它的属性包括指向上一帧的链接,正在被执行的代码对象(参见上文),本地及全局名字空间字典以及当前指令等。


8.跟踪记录对象: 当异常发生时,一个包含针对异常的栈跟踪信息的跟踪记录对象被创建。如果一个异常有自己的处理程序,处理程序就可以访问这个跟踪记录对象。


9.切片对象:当使用 Python 扩展的切片语法时,就会创建切片对象。mylist[::-1]是逆转mylist元素的顺序哦!


10.XRange调用内建函数 xrange() 会生成一个 Xrange 对象,xrange()是内建函数 range()的兄弟版本, 用于需要节省内存使用或 range()无法完成的超大数据集场合,因为循环时xrange()只生成当前的元素,不像range()一开始就生成了完整的list。python3已经移除了2的range(),并通过2中的xrange()构造了新的range(),生成的xrange对象列表支持切片操作。


11.比较操作是针对对象的值进行的,也就是说比较的是对象的数值而不是对象本身。Python 提供了 is 和 is not运算符来测试两个变量是否指向同一个对象,这样就可以比较两个对象本身是不是一样了,很赞吧!。还有强调一点:由于整数对象和字符串对象是不可变对象,所以 Python 会很高效的缓存它们,比如2.7.6版本的会缓存[-5,256]的整数。这会造成我们认为 Python 应该创建新对象时,它却没有创建新对象的假象。
eg.
>>> a = 1
>>> b = 1
>>> a is b
True


>>> a = 'hello'
>>> b = 'hello'
>>> a is b
True
>>> id(a)
139819948877360
>>> id(b)
139819948877360


12.标准类型内建函数:
    cmp(obj1,obj2): 比较obj1和obj2的大小,obj1>obj2返回值>0,obj1<obj2返回值<0,obj1==obj2返回值=0
    repr(obj)或`obj`: 返回一个对象的字符串表示,repr() 输出对 Python 比较友好,通常可以用求值运算eval()重新获得原对象obj
        eg. 
        >>> q1=repr(0l)
        >>> q1
        '0L'
        >>> q2 = eval(q1)
        >>> q2
        0L
    str(obj): 返回对象适合可读性好的字符串表示,它的返回结果通常无法用于 eval()求值
        eg.
        >>> w1 = str(0l)
        >>> w1
        '0'
        >>> w2 = eval(w1)
        >>> w2
        0


    type(obj): 得到一个对象的类型,并返回相应的type对象


13. 内建类型现在都是类,内建转换函数,现在变成了工厂函数。
   常见的内建函数有: int(), long(), float(), complex();str(), unicode(), basestring();list(), tuple();type()
   
14. 标准类型的分类:
    a.存储模型:一个能保存单个字面对象的类型我们称它为原子或标量存储,那些可容纳多个对象的类型,我们称之为容器存储。所有的 Python 容器对象都能够容纳不同类型的对象。
    分类:(1)标量/原子类型:数值(所有的数值类型),字符串(全部是文字)
          (2)容器类型:列表、元组、字典
    b.更新模型:对象创建成功之后,可变类型的值可以被更改,不可变对象则不允许被更改。新创建的对象被关联到原来的变量名,旧对象被丢弃,垃圾回收器会在适当的时机回收这些对象。可变类型有列表,字典,比如说列表和字典中的元素发生改变,列表的id值依然不变;不可变类型有数字、字符串、元组
    c.访问模型:三种访问模式(直接存取,顺序存取和映射)
        (1)对非容器类型可以直接访问。所有的数值类型都归到这一类。
        (2)序列类型是指容器内的元素按从 0 开始的索引顺序访问。有字符串, 列表和元组。
        (3)映射类型类似序列的索引属性,不过它的索引并不使用顺序的数字偏移量取值, 它的元素无序存放, 通过一个唯一的 key 来访问, 这就是映射类型, 它容纳的是哈希键-值对的集合。有字典。
   
15. python不支持的类型
    字符型,使用单个字符串替代
    指针,其实python中一切都是指针,因为一切都是对象,多亏了引用。
    注意的是:python的普通整数相当于标准整数类型,实现等同于C语言的长整数,你可以放心表示;python的浮点数类型实际上就是C语言的双精度浮点类型,而没有单精度浮点数。对那些宁愿放弃更大的取值范围而需要更高精确度的用户来说, Python 还有一种十进制浮点数类型 Decimal, 不过你必须导入 decimal 模块才可以使用它。
    





















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值