装饰器的作用

首先装饰器是非常常用的python 高阶方法。笔者带领大家依次去了解装饰器产生的目的

装饰器 的定义:装饰器本质上就是一个python函数,它可以让其它函数在不需要做任何代码改动的前提下增加额外的功能,装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景中,比如-- >插入日志、性能测试、事务处理、缓存、权限校验等场景。

首先python的装饰器的功能可以不通过装饰器来完成

例如计算统计时间:

import time
def f1():
    # print(time.time())###unix时间戳
    print('This is a function')
#定义为格林位置时间的1970年01月01日00时00分00秒到现在的总秒数
##对修改是封闭枫的,对扩展是开放的
# f1()

def f2():
    print('Thie is a function')

def print_current_time(func):
    print(time.time())
    func()
print_current_time(f1)
print_current_time(f2)

1641455890.6535068
This is a function
1641455890.6535068
Thie is a function

通过函数的调用来完成调用,是可以达到目的的

但是这样违背了我们python编程语言的初衷,我们在使用函数的时候,遵循定义可以麻烦,但是调用必需精简,

其次是,一个常规的思想,对修改是封闭的,但是对于扩展是开放的。

第一种,无参的装饰器:

def decorstor(func):
    def wrapper():
        print(time.time())
        func()
    return wrapper
@decorstor
def f1():
    # print(time.time())###unix时间戳
    print('This is a function')

1641456855.1922462
This is a function

第二种,二个或者多个参数的装饰器:

我们在使用装饰器时,为了满足不同函数的个性化需求,往往,参数不确定个数多少,为了更好的满足不同的需求,通常需要把装饰器抽象化

def decorstor(func):
    def wrapper(*args,**kwargs):
        print(time.time())
        func(*args,**kwargs)
    return wrapper
@decorstor
def f1(func_name):
    # print(time.time())###unix时间戳
    print('This is a function'+func_name)
@decorstor
def f2(func_name1,func_name2):
    print('Thie is a function'+func_name1+func_name2)
@decorstor
def f3(func_name1,func_name2,**kw):
    print('Thie is a function'+func_name1+func_name2)
    print(kw)
f1('est')
f2("est",'acasd')
f3('test','test2',a =1 ,b =2,c =3)

1641457351.128553
This is a functionest
1641457351.128553
Thie is a functionestacasd
1641457351.128553
Thie is a functiontesttest2
{'a': 1, 'b': 2, 'c': 3}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值