装饰器2

 

 

首先需要分清可变对象和不可变对象。
整数和字符串都属于不可变对象,当指向不可变对象的变量值改变时,系统是重新创建一个新的不可变对象赋值给变量。
list,set,dict这些属于可变对象,当两个变量指向同一个可变对象时改变可变对象内部的值时会反映在两个变量上,看起来就像是指针或引用。

 

Python函数参数对于可变对象,函数内对参数的改变会影响到原始对象;对于不可变对象,函数内对参数的改变不会影响到原始参数。原因在于:

1、可变对象,参数改变的是可变对象,其内容可以被修改。

2、不可变对象,改变的是函数内变量的指向对象。

 

不可变对象:变量本身不可变,如果对其做修改,只会默认给你返回一个全新的变量,内存地址和值都是新的。
可变对象 :变量本身可变,如果对其做修改,会在其自身状态上直接做变化,也就是内存地址不变,而值变化了。
 

 

装饰器

 

 

定义:本质是函数,(用于装饰其他函数),就是为其他函数添加附加功能。

原则:1.不能修改被装饰函数的源代码。

           2.不能修改被装饰函数的调用方式。

 

实现装饰器知识储备:

1.函数即“变量”:1)变量是直接存在于内存之中的,是直接指向内存地址的。

                            2)定义一个函数,实质就是把函数体赋值给了函数名 ,函数也有内存回收机制。(没有引用,就被回收)

                            3)变量在使用的时候分2步:第1步-定义;第2步-调用。

                             4)一个门牌号映射一个内存地址,用函数名就可以去调用函数体(用门牌号就可以去调用内存中的程序)

2.高阶函数:

                         1)把一个函数名当做实参传给另外一个函数。(在不修改被装饰函数源代码的情况下为其添加功能)

                          2)返回值中包含函数名。(不修改函数的调用方式)用同样的函数名可以索引得到不同的内容,(内存中的内容有改变,但是占用的还是同一块内存,门 牌号没变)        

3.嵌套函数:在一个函数的函数体内,再用def去定义另外的一个函数。

高阶函数+嵌套函数=》装饰器

posted on 2017-07-21 11:56  momo8238  阅读(103)  评论(0编辑  收藏  举报