一文教你搞懂python函数装饰器(wrapper)(代码片段)

python真好用 python真好用     2023-02-08     543

关键词:

python函数装饰器

函数装饰器,定义一个装饰器后,调用改装饰器,个人理解是在目标函数前后做一些操作。
例如:定义一个鉴权的函数装饰器,在给目标函数的时候添加装饰函数就可以做到先鉴权,鉴权成功再运行目标函数

装饰器模板参考如下:

#模板
# 装饰器:wrapper
# 模板:
# def    装饰器名(func):                    #def 与 @之后的函数名称一致   调用函数func与ret=func(*args,**kwargs)内部函数一致
#     def wrapper(*args,**kwargs):         #def 与 return 之后的函数名称一致
#         ret = func(*args,**kwargs)
#         return ret                       #return ret 与 ret=func(*args,**kwargs)一致
#     return wrapper
# 
# @装饰器名
# def foo():
#     pass

来一段实例:

import time

def timmer(fun1):
    def wrapper(*args,**kwargs):
        start_time=time.time()
        print('start_time:',start_time)#调用foo函数之前的处理
        print('----------调用函数foo前的操作-----------')
        res=fun1(*args,**kwargs)#被装饰的函数,以下指代foo,相当于调用函数foo
        print('----------调用函数foo后的操作-----------')
        stop_time=time.time()#调用foo函数之后的处理
        print('stop_time:',stop_time)
        print('run time is %s' %(stop_time-start_time))
        return res
    return wrapper

@timmer
def foo():
    time.sleep(3)
    print('from foo')

# @timmer
# def foo1():
#     time.sleep(5)
#     print('from foo1')

foo()
# foo1()

运行的顺序如下:
1.装饰器会将函数进行装饰,然后先执行装饰前的代码

        start_time=time.time()
        print('start_time:',start_time)#调用foo函数之前的处理
        print('----------调用函数foo前的操作-----------')

2.接着会执行被装饰函数的代码

    time.sleep(3)
    print('from foo')

3.最后执行的是被装饰函数后的代码

        print('----------调用函数foo后的操作-----------')
        stop_time=time.time()#调用foo函数之后的处理
        print('stop_time:',stop_time)
        print('run time is %s' %(stop_time-start_time))

运行结果如下:

一文彻底搞懂python中的装饰器偏函数(代码片段)

装饰器要讲清楚装饰器,首先要知道一些前置概念。下文涉及到这些概念的地方,会展开讲述。什么是装饰器?装饰器是一种AOP(面向切面编程)的设计模式。面向对象编程往往需要通过继承或组合依赖等方... 查看详情

一文彻底搞懂python中的装饰器偏函数(代码片段)

装饰器要讲清楚装饰器,首先要知道一些前置概念。下文涉及到这些概念的地方,会展开讲述。什么是装饰器?装饰器是一种AOP(面向切面编程)的设计模式。面向对象编程往往需要通过继承或组合依赖等方... 查看详情

python----多个装饰器装饰一个函数

#装饰器回顾:#defwrapper(f):#f=func1#definner(*args,**kwargs):#print(333)#1.333#ret=f(*args,**kwargs)#print(666)#returnret#returninner#@wrapper#func1=wrapper(func1)=inner#deffunc1():#inner()定义函数,将函数加载到内存中,但 查看详情

装饰器

...但是想在原函数的前后添加功能。装饰器的固定格式:defwrapper(func):#装饰器函数,func是被装饰的函数definner(*args,**kwargs)‘‘‘被装饰前要做的事‘‘‘ret=func(*args,**kwargs)‘‘‘被装饰后要做的事‘‘‘returnretreturnin... 查看详情

python装饰器使用总结

.../usr/bin/envpython#-*-coding:utf-8-*- __author__=‘shouke‘ defwrapper_method1(func):#func用于接收被装饰的函数地址   defwrapper():       print("执行wrapper_method1")       func()#调用被... 查看详情

一文彻底读懂python装饰器(代码片段)

装饰器主要用途是:不修改函数源码的前提下,添加额外的功能。如果你有Java开发经验,你会发现,Python中的装饰器其实就类似于Java的注解。好的,废话不多说,进入正题。我们假想如下一个场景:... 查看详情

一文彻底读懂python装饰器(代码片段)

装饰器主要用途是:不修改函数源码的前提下,添加额外的功能。如果你有Java开发经验,你会发现,Python中的装饰器其实就类似于Java的注解。好的,废话不多说,进入正题。我们假想如下一个场景:... 查看详情

一文让你搞懂spring的统一事务模型

Spring事务的知识体系进入主题之前,先来了解一下Spring事务,都有哪些内容:Spring事务包含对分布式事务和单机事务的支持,我们用的比较多的是单机事务,也就是只操作一个数据库的事务。单机事务,按照用法分,又可以分为... 查看详情

python笔记:python装饰器

...tor函数作为参数传递给my_decorator函数,并指向了内部函数wrapper(),内部函数wrapper()又会调用原函数test_decorator(),所以decorator()的执行会先打印\'thisiswrapper\',然后打印\'helloworld\',test_decorator()执行完成后,打印\'bye\',*args和**kwarg... 查看详情

一文带你搞懂内存泄漏!!!(代码片段)

好文推荐:作者:codelang检测内存是否泄漏非常简单,只要在任意位置调用Debug.dumpHprofData(file)即可,通过拿到hprof文件进行分析就可以知道哪里产生了泄漏,但dump的过程会suspend所有的java线程,导致用户界... 查看详情

python基础篇:什么是装饰器?装饰器有什么用?(代码片段)

...示例,它向函数添加了计时功能:importtimedeftimer(func):defwrapper(*args,**kwargs):start_time=time.time()result=func(*args,**kwargs)end_time=time.time()print("Timeelapsed:",end_time-start_time)returnresultreturnwrapper@timerdefmy_function():time.sleep(2)my_function()在上面的示例... 查看详情

手把手教你搞懂android反编译

我们知道,Android的程序打包后会生成一个APK文件,这个文件可以直接安装到任何Android手机上,因此,反编译就是对这个APK进行反编译。Android的反编译分成两个部分:一个是对代码反编译,也就是java文件的反编译。一个是对资... 查看详情

Python 装饰器 - func_wrapper() 不带参数(给定 1 个)

】Python装饰器-func_wrapper()不带参数(给定1个)【英文标题】:Pythondecorator-func_wrapper()takesnoarguments(1given)【发布时间】:2015-09-1802:16:36【问题描述】:我正在尝试写我的第一个decorator,但有点迷茫。我希望decorator在执行主函数之... 查看详情

一文读懂python装饰器(代码片段)

↓推荐关注↓Python是一种对新手很友好的语言。但是,它也有很多较难掌握的高级功能,比如装饰器(decorator)。很多初学者一直不理解装饰器及其工作原理,在这篇文章中,我们将介绍装饰器的来龙去脉... 查看详情

一文带你搞懂“数据”在内外网环境下怎么流通

大学还没毕业,刚出来实习,在搞网络安全的同时我连内外网网络数据包的走向,我都搞不明白怎么去搞安全,所以下面咱们一起学习网络数据包在内外网环境下是怎么进行流通的。1.内网和外网的含义       ... 查看详情

叠加多个装饰器

...载装饰器就是将原函数名偷梁换柱成了装饰器最内层那个wrapper函数#在加载完毕,调用原函数其实就是在调用wrapper函数#当一个被装饰的对象同时叠加多个装饰器时#装饰器的加载顺序是:自下而上#装饰器内wrapper的函数的执行顺... 查看详情

❤️野指针?悬空指针?❤️一文带你搞懂!(代码片段)

🎈作者:Linux猿🎈简介:CSDN博客专家🏆,C/C++、面试、刷题、算法尽管咨询我,关注我,有问题私聊!🎈关注专栏:C/C++面试通关集锦 (优质好文持续更新中……)... 查看详情

一文让你搞懂javascript如何实现继承(代码片段)

一、本文想给你聊的东西包含一下几个方面:(仅限于es6之前的语法哈,因为es6里面class这关键字用上了。。)1.原型是啥?原型链是啥?2.继承的通用概念。3.Javascript实现继承的方式有哪些? 二、原型是啥?原型链是啥?1.... 查看详情