python进阶04:装饰器

装饰器概念:装饰器就是对原函数的拓展,在不改变原核心代码的情况下新增新功能。

这个概念挺重要的,不会装饰器,就不能说真的会python。

装饰器主要有以下几种方式:

import time
def func01(func):
    #确保装饰器被调用
    def func02(): 
        print('我是装饰器函数,对函数增加计时功能')
        start_time = time.time()
        func()
        used_time = time.time()-start_time
        print(used_time)
    return func02

@func01
#这一步的意思就是func03 = func01(func03),一定要记住,完全等价!!!
def func03():
    print('我是被装饰函数')
    time.sleep(2)
    print('执行完毕')

#带参数如何做?
#带多个参数呢?
def func04(func):
    #确保装饰器被调用
    #def func05(x):
    def func05(*args,**kwargs): 
        print('向执行函数传输参数:',args)
        func(*args,**kwargs)
    return func05
@func04
def func06(x,y):
    print('传入参数值为:',x,y)

@func04    
def func07(x,y,z):
    print('传入参数值为:',x,y,z)
#如果一个装饰器不够呢?
def func08(func):
    def func09():
        print('我是第一个装饰器')
        func()
    return func09
def func10(func):
    def func11():
        print('我是第二个装饰器')
        func()
    return func11
#装饰的时候是从下网上装饰,执行是从上往下执行。
@func08
@func10
def func12():
    print('我是被装饰的函数')

#如果执行函数有返回值的情况呢?
#定义装饰器函数
def func13(func):
    def func14():
        print('我是装饰器函数')
        ret = func()
        return ret
    return func14
#定义被执行函数
@func13
def func15():
    print('我是被装饰的函数')
    return 1

 
if __name__ == '__main__':
    func03()
    '''
    func06(100,200)
    func07(1, 2, 4)
    #用于测试两个装饰器的函数
    func12()
    print('func15()返回值为:',func15())
    '''


(1)简单装饰器,执行func03()的时候

我是装饰器函数,对函数增加计时功能
我是被装饰函数
执行完毕
2.0124034881591797

(2)不定参数,执行func06(),func07()

向执行函数传输参数: (100, 200)
传入参数值为: 100 200
向执行函数传输参数: (1, 2, 4)
传入参数值为: 1 2 4

(3)多个装饰器,执行func12()

我是第一个装饰器
我是第二个装饰器
我是被装饰的函数

(4)带有返回值的装饰器,执行func15()

我是装饰器函数
我是被装饰的函数
func15()返回值为: 1


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值