Python成长之路第五篇:Python基础之装饰器

Posted albert0924

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python成长之路第五篇:Python基础之装饰器相关的知识,希望对你有一定的参考价值。

一、什么是装饰器

装饰:装饰既修饰,意指为其他函数添加新功能

器:器既函数

装饰器定义:本质就是函数,功能是为其他函数添加新功能

二、装饰器需要遵循的原则

1、不能修改装饰器的源代码(开放封闭原则)

2、为装饰器函数添加新功能后,不能修改函数的调用方式

三、实现装饰器的知识储备

装饰器 = 高阶函数 + 函数嵌套 + 闭包

四、高阶函数 

高阶函数的定义:

1、函数接收的参数是一个函数名

2、函数的返回值是一个函数名

3、满足上述条件任意一个,都可以称为之高阶函数

技术分享图片
 1 def foo():
 2     print(我的函数名作为参数传给高阶函数)
 3 def gao_jie1(func):
 4     print(我就是高阶函数1,我接收的参数名是%s %func)
 5     func()
 6 
 7 def gao_jie2(func):
 8     print(我就是高阶函数2,我的返回值是%s %func)
 9     return func
10 
11 gao_jie1(foo)
12 gao_jie2(foo)
高阶函数示范
技术分享图片
 1 #高阶函数应用1:把函数名当做参数传给高阶函数
 2 import time
 3 def foo():
 4     print(from the foo)
 5 
 6 def timmer(func):
 7     start_time=time.time()
 8     func()
 9     stop_time=time.time()
10     print(函数%s 运行时间是%s %(func,stop_time-start_time))
11 timmer(foo)
12 #总结:我们确实为函数foo增加了foo运行时间的功能,但是foo原来的执行方式是foo(),现在我们需要调用高阶函数timmer(foo),改变了函数的调用方式
把函数名当做参数传给高阶函数
技术分享图片
 1 #高阶函数应用2:把函数名当做参数传给高阶函数,高阶函数直接返回函数名
 2 import time
 3 def foo():
 4     print(from the foo)
 5 
 6 def timmer(func):
 7     start_time=time.time()
 8     return func
 9     stop_time=time.time()
10     print(函数%s 运行时间是%s %(func,stop_time-start_time))
11 foo=timmer(foo)
12 foo()
13 #总结:我们确实没有改变foo的调用方式,但是我们也没有为foo增加任何新功能
函数返回值是函数名

 

高阶函数总结:

1、函数接收的参数是一个函数名

  作用:在不修改函数源代码的前提下,为函数添加新功能

  不足:会改变函数的调用方式

2、函数的返回值是一个函数名

  作用:不修改函数的调用方式

  不足:不能添加新功能

 五、函数嵌套

def foo(name):
    print("from foo %s" %name)
    def ret():
        print("from ret")
        def bar():
            print("from bar")
        bar()
    ret()
    
foo("Albert")

  

以上是关于Python成长之路第五篇:Python基础之装饰器的主要内容,如果未能解决你的问题,请参考以下文章

Python成长之路第五篇:Python基础之文件处理

Python成长之路第五篇:Python基础之迭代器和生成器

python学习之路基础篇(第五篇)

Python之路第五篇python基础 之初识函数

python基础-第五篇-5.3装饰器

Python之路第五篇:面向对象及相关