python 装饰器

1. 闭包函数概念:
函数内部定义的函数;引用了外部变量但非全局变量。

#示例
def count():
    a = 1
    b = 1
    def sum():
        c = 1
        return a + c  # a - 自由变量
    return sum

2. 高阶函数:
函数参数是一个函数,返回一个函数名函数参数是一个函数,返回一个函数名

def func1(x,y):
    s=x+y
    return s

def func2(func):
    
    return 2*func

f1=func1(3,4)
f2=func2(f1)
print(f2)
#输出:
14

3. 装饰器:
装饰器的属性:
实质: 是一个函数
参数:是你要装饰的函数名(并非函数调用)
返回:是装饰完的函数名(也非函数调用)
作用:为已经存在的对象添加额外的功能
特点:不需要对对象做任何的代码上的变动,函数调用方式不被修改
即:在不改变原函数代码和调用方式的基础上,添加新的功能

实例:利用装饰器为函数增加计时功能

#利用装饰器为函数增加计时功能
import time
#新建一个装饰器decorator,func为待装饰的函数
def decorator(func):
    def newfunc():#定义装饰函数
        print('此处添加执行func之前的功能,例如:')
        print('func函数开始执行时间:',time.ctime())
        func()
        print('此处添加执行func之后的功能')
        print('func函数结束执行时间:',time.ctime())

    return newfunc #返回装饰函数

def myfunc():
    print('这是需要被装饰的函数')
    time.sleep(3)
    
print('装饰前')
myfunc()
print('')
print('装饰中....')
myfunc=decorator(myfunc)
print('')
print('装饰后')
myfunc()

#输出:
装饰前
这是需要被装饰的函数

装饰中....

装饰后
此处添加执行func之前的功能,例如:
func函数开始执行时间: Thu Feb 28 22:05:48 2019
这是需要被装饰的函数
此处添加执行func之后的功能
func函数结束执行时间: Thu Feb 28 22:05:51 2019

装饰器语法糖:
在需要被装饰的函数上加@decorator_name,可以省略调用decorator 和newfunc函数,直接调用func函数计划科获得被装饰后的函数

#利用装饰器为函数增加计时功能
import time
#新建一个装饰器decorator,func为待装饰的函数
def decorator(func):
    def newfunc():#定义装饰函数
        print('此处添加执行func之前的功能,例如:')
        print('func函数开始执行时间:',time.ctime())
        func()
        print('此处添加执行func之后的功能')
        print('func函数结束执行时间:',time.ctime())

    return newfunc #返回装饰函数

@decorator   
def myfunc():
    print('这是需要被装饰的函数')
    time.sleep(3)
    
myfunc()
#输出
此处添加执行func之前的功能,例如:
func函数开始执行时间: Thu Feb 28 22:09:57 2019
这是需要被装饰的函数
此处添加执行func之后的功能
func函数结束执行时间: Thu Feb 28 22:10:00 2019
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值