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.总结:

  

原文地址:https://www.cnblogs.com/xiaoyinyue/p/5923904.html