博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
07 装饰器及进阶
阅读量:5230 次
发布时间:2019-06-14

本文共 1335 字,大约阅读时间需要 4 分钟。

简单的装饰器举例

def wrapper(f): # 装饰器函数    def inner(*args,**kwargs):        print('在函数执行前')        ret = f(*args,**kwargs) # 被装饰的函数        print('在函数执行后')        return ret    return inner@wrapper # @ 语法糖 ,@装饰器函数名def func(a,b):# 被装饰的函数    print(f'{a}+{b}={a+b}')# 被装饰器装饰后,函数名 func = wrapper(func) = innerresult = func(1,2)# result = func(1,2) = inner(1,2)

装饰器的作用

不想修改函数的调用方式 但是还想在原来的函数前后添加功能。timmer就是一个装饰器函数,只是对一个函数 有一些装饰作用

原则

开放封闭原则:

​ 对扩展是开放的,对修改是封闭的。

本质

装饰器的本质 : 闭包函数

函数名的两个内建函数

def wahaha():    '''    一个打印娃哈哈的函数    :return:    '''    print('娃哈哈')print(wahaha.__name__) #查看字符串格式的函数名 # wahahaprint(wahaha.__doc__)  #document     #一个打印娃哈哈的函数    #    :return:

多个装饰器装饰同一个函数

#多个装饰器装饰一个函数def wrapper1(func):    def inner1():        print('wrapper1 ,before func')        ret = func()        print('wrapper1 ,after func')        return ret    return inner1def wrapper2(func):    def inner2():        print('wrapper2 ,before func')        ret = func()        print('wrapper2 ,after func')        return ret    return inner2def wrapper3(func):    def inner3():        print('wrapper3 ,before func')        ret = func()        print('wrapper3 ,after func')        return ret    return inner3@wrapper3@wrapper2@wrapper1def f():    print('in f')    return '哈哈哈'print(f())

使用场景

记录用户的登录情况、、、计算这个函数的执行时间

转载于:https://www.cnblogs.com/chenych/p/10940301.html

你可能感兴趣的文章
Springboot使用步骤
查看>>
Spring其他注解
查看>>
Spring属性注入
查看>>
Springboot-配置文件
查看>>
Spring-自动配置
查看>>
Springboot-日志框架
查看>>
SpringBoot-静态资源映射
查看>>
SpringBoot-webjars
查看>>
SpringBoot-thymeleaf
查看>>
IDEA 调试 JAVA ConcurrentLinkedQueue
查看>>
pip 命令安装 rdbtools
查看>>
P1908-逆序对
查看>>
P1192-台阶问题
查看>>
ACM模板——康托展开
查看>>
P1025-数的划分
查看>>
P1305-新二叉树
查看>>
P1087-FBI树
查看>>
P5018-对称二叉树
查看>>
Leetcode-5147 Decrease Elements To Make Array Zigzag(递减元素使数组呈锯齿状)
查看>>
Leetcode-5148 Binary Tree Coloring Game(二叉树着色游戏)
查看>>