Python装饰器

1 装饰器的定义

  • 在不改变现有函数源代码以及函数调用方式前提下,实现给函数增加额外的功能。
  • 装饰器的本质就是一个闭包函数,其创建包含三步:①有嵌套②有引用③有返回
  • 有返回代表外部函数返回内部函数的内存地址(内部函数的名称),不带()

2 典型装饰器

# 获取程序执行时间
import time
def get_time(fn):
    def inner():
        # 添加装饰器修饰功能(获取程序的执行时间)
        begin=time.time()
        # 调用fn函数
        fn()
        end=time.time()
        print(f'这个函数的执行时间:{end-begin}')
    return inner

@get_time
def demo():
    num_list=[]
    for i in range(1000000):
        num_list.append(i)

demo()

3 带有参数的装饰器

def logging(fn):
    def inner(*args,**kwargs):
        # 添加装饰器(输出日志信息)
        print('--正在进行计算--')
        # 执行要修饰的函数
        fn(*args,**kwargs)
    return inner

@logging
def sum_num(*args,**kwargs):
    result=0
    for i in args:
        result+=i
    for v in kwargs.values():
        result+=v
    print(result)

sum_num(1,2,a=3,b=4)

4 带有返回值的装饰器(通用装饰器)

  • 如果一个函数执行完毕后,没有return返回值,则默认返回None
  • 通用装饰器的特征:①有嵌套②有引用③有返回④有不定长参数⑤有return返回值
def logging(fn):
    def inner(*args,**kwargs):
        print('--日志信息:正在努力计算--')
        return fn(*args,**kwargs)
    return inner

@logging
def sum_num(a,b):
    return a+b

print(sum_num(10,20))

5 使用装饰器传递参数

  • 根据传递参数不同,打印不同的日志信息
def logging(flag):
    def decorator(fn):
        def inner(*args, **kwargs):
            if flag == '+':
                print('--日志信息:增在努力进行加法运算--')
            elif flag == '-':
                print('--日志信息:增在努力进行减法运算--')
            return fn(*args,**kwargs)
        return inner
    return decorator

@logging('+')
def sum_num(a,b):
    return a+b

@logging('-')
def sub_num(a,b):
    return a-b

print(sum_num(20,10))
print(sub_num(20,10))

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值