• python核心编程笔记 ---chapter 4


    chapter 4

    1.python对象:所有的python对象都有三个特性:身份、类型和值

     身份:每一个对象都有一个唯一的身份标识自己,任何对象的身份都可以使用内建函数id()来得到。这个值可以被认为是该对象的内存地址。

     类型:对象的类型决定了该对象可以保存什么类型的值。可以用内建函数type()查看对象的类型,type返回的是对象。

     值:对象表示的数据项

    2.对象属性:某些python对象有属性、值或相关联的可执行代码,比如方法,python用点“.”标记方法来访问属性

    3.标准类型:数字、整型、布尔型、长整型、浮点型、复数型、字符串、列表、元组、字典

    4.其他内建类型:类型、NULL对象、文件、集合/固定集合、函数/方法、模块、类

    5.所有类型对象的类型都是type

    6.python有一个特殊的类型,被称作Null对象或者NoneType,他只有一个值就是None,他不支持任何运算也没有任何方法,他的布尔值总是False。

    7.内部类型:代码、帧、跟踪记录、切片、省略、Xrange

    8.对象身份比较:

     python不止可以进行值比较,也支持对象本身的比较。对象可以通过引用被赋值到另一个变量,因为每个变量都指向同一个(共享的数据对象),只要任何一个引用发生改变,该对象的其他引用也发生改变。

    例1:foo1=foo2=4.3  这两个引用指向同一个对象,如图

    即:一个值为4.3的数字对象被创建,然后这个对象的引用被赋值给foo1和foo2,结果就是两者指向同一个对象。即一个对象的两个引用。

    例2:foo1=4.3  foo2=foo1

    这个与例1类似,都指向同一个对象。

    例3:foo1=4.3     foo2=1.3+3.0 

    该例中:首先一个数字对象被创建,然后赋值给foo1,然后第二个数值对象被创建并赋值给foo2,尽管这两个对象保存的是同样大小的值,但系统中保存的都是两个独立的对象。其中foo1是对第一个对象的引用,foo2这是对第二个对象的引用。

    9.python中提供了is 和is not运算符测试两个变量是否指向同一个对象。

    a is b 等价于 id(a)==id(b) 

     标准类型对象身份比较符:

    obj1 is obj2                    obj1和obj2是同一个对象

    obj1 is not obj2               obj1和obj2不是同一个对象

    上边的例子中,a和b指向不同的对象,c和d指向同一个对象,这是因为在python中会为每个出现的对象分配内存,哪怕他们的值完全相等(注意是相等不是相同)。如执行a=1.0,b=1.0这两个语句时会先后为2.0这个Float类型对象分配内存,然后将a与b分别指向这两个对象。所以a与b指向的不是同一对象;但是为了提高内存利用效率对于一些简单的对象,如一些数值较小的int对象,python采取重用对象内存的办法,如指向c=1,d=1时,由于1作为简单的int类型且数值小,python不会两次为其分配内存,而是只分配一次,然后将c与d同时指向已分配的对象。

    但是在pycharm中,得到的结论与上述不一致,不知道为什么。

    9.内建函数

     type(object)

     type()接受一个对象作为参数,并返回它的类型。它的返回值是一个类型对象。

     cmp()

     内建函数cmp()用于比较两个对象obj1和obj2,如果obj1小于obj2,则返回一个负整数,如果obj1大于obj2,则返回一个正整数,如果obj1=obj2,则返回0。

     str()和repr()及``运算符

     str()和repr()及``运算符可以以字符串的形式获取对象的内容、类型、数值属性等信息。str()函数得到的字符串可读性好,repr()函数得到的字符串通常可以用来重新获得该对象。

    repr()和``返回的是一个“官方”的字符串表示,可以通过求值运算eval()重新获得该对象,但str()致力于返回一个可读性好的字符串表示,它的返回结果无法用于eval()求值。

    10.

     isinstance()

     

    isinstance(object, classinfo)  :判断实例是否是这个类或者object是变量,其第一个参数为对象,第二个为类型名或类型名的一个列表。其返回值为布尔型。若对象的类型与参数二的类型相同则返回True。若参数二为一个元组,则若对象类型与元组中类型名之一相同即返回True。

     11.python运算类型和内建函数总结(优先级从高到低):

      string:``

      内建函数:cmp()、repr()、str()、type()

      值比较:>、<、>=、<=、==、!=

      对象比较:is、is not

      布尔运算:not、and、or

    12、存储模型:

      标量/原子 存储:能保存单个字面对象的类型;数值(所有的数值类型),字符串(全部都是文字)

      容器存储:能容纳多个对象的类型;列表、元组、字典

    13.更新模型

      可变类型:列表,字典

      不可变类型:数字、字符串、元组

      疑问:数字和字符串对象不可改变?例:x=1;x=2;i=0;i=i+1

      答:以上的例子中,事实上是一个新的对象被创建,取代了旧对象。新创建的对象被关联到原来的变量名,旧对象被丢弃,垃圾回收器会在适当的时期回收这些对象。

    14.访问模型

      直接访问:数字

      顺序访问:字符串、列表、元组

      映射访问:字典

    15.总结:

      

  • 相关阅读:
    Map
    Enumeration输出
    iterator的基本用法
    Annotation整合工厂设计模式
    自定义Annotation
    Annotation
    动态代理设计模式
    静态代理设计模式
    自定义ClassLoader
    获取类的类对象的几种方式
  • 原文地址:https://www.cnblogs.com/xiaoyinyue/p/5923904.html
Copyright © 2020-2023  润新知