码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-04-09 16:22:28      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:code   one   接收   pre   src   成长   imp   图片   imm   

一、什么是装饰器

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

器:器既函数

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

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

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基础之装饰器

标签:code   one   接收   pre   src   成长   imp   图片   imm   

原文地址:https://www.cnblogs.com/albert0924/p/8760575.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!