博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python中的装饰器的初步理解
阅读量:5008 次
发布时间:2019-06-12

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

什么是装饰器?

  装饰器的本质是一个函数,其作用是用来装饰其他的函数,给其他函数附加行的功能。

原则:

   1.不能修改被装饰函数的源码。

  2.不能改变被装饰函数的调用方式。

那么什么是函数?

 简单的来说:将一段代码逻辑,通过特殊的语法组织起来,可有参数,可有返回值,能够在

别的地方被调用。python中函数是可以有参数也可以没有参数,可以有返回值,也可以没有。默认返回None.

理解下面三句话:

  1.函数也是可以是变量

        函数也可以作为参数,函数也可以作为返回值

  2.高阶函数

       以函数作为参数,作者返回值是函数的函数

 3.函数嵌套

  函数里面定义函数

装饰器 = 高阶函数 +   函数嵌套

装饰器的应用场景:插入日志,性能测试,处理事物,权限验证等

现在有一个需要,测试一个函数的运行时间

#!/user/bin/env python3# -*- coding:utf-8 -*-import timedef my_time(func):    def wrapper(*args, **kwargs):        start_time = time.time()        ret = func(*args, **kwargs)        end_time = time.time()        print("{}函数运行了{}秒".format(func.__name__, (end_time - start_time)))        return ret    return wrapper  # 注意不能是wrapp()@my_time  # 相当于f=my_time(f(x,y))def f(x, y):    ret = x + y    print("helle world")    time.sleep(2)    return retprint(f(3, 4))

 

代参数的装饰器

#!/user/bin/env python3# -*- coding:utf-8 -*-def logging(level):    def wrapper(func):        def inner_wrapper(*args, **kwargs):            print("[{level}]: enter function {func}()".format(                level=level,                func=func.__name__))            return func(*args, **kwargs)        return inner_wrapper    return wrapper@logging(level='INFO')def say(something):    print("say {}!".format(something))# 如果没有使用@语法,等同于# say = logging(level='INFO')(say)if __name__ == '__main__':    say('hello')

  下面是一个日志的装饰器

def log(func):    def wrapper(*args, **kwargs):        print("begin call{}".format(func.__name__))        temp = func(*args, **kwargs)        print("after call %s" % func.__name__)        return temp    return wrapper

 刚刚开始入门,未在实际工厂环境中实际运用。后面还有类装饰器,内置的装饰器等,还有就是装饰器中的坑和优化,在实际过程中遇到再说,先入门。

 

转载于:https://www.cnblogs.com/materfont/p/9555526.html

你可能感兴趣的文章
后缀自动机
查看>>
ZZNU-OJ-2118 -(台球桌面碰来碰去,求总距离)——模拟到爆炸【超时】的不能AC的代码...
查看>>
Sunday串匹配算法 C语言实现
查看>>
学习方法
查看>>
Python成长笔记 - 基础篇 (二)python基本语法
查看>>
87JS原生:跑马灯效果
查看>>
6.方法_EJ
查看>>
html 字符串 生成 pdf 完美解决中文不显示
查看>>
记一次由于Java泛型类型擦除而导致的问题,及解决办法
查看>>
python列表逆序三种方法
查看>>
将笔记本变身WiFi热点
查看>>
SSU 479.Funny Feature
查看>>
pycharm修改代码模板支持中文输出
查看>>
poj 1904 强连通分量 tarjan
查看>>
史上最全的测试团队组建方法
查看>>
webview与壳交互的几种方式
查看>>
python3对于时间的处理
查看>>
PE破解win2008登录密码
查看>>
JVM垃圾回收机制
查看>>
结对编程2 微软学术搜索 第一部分——功能性bug
查看>>