当前位置: 首页 > news >正文

一文教你搞懂python函数装饰器(wrapper)

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

运行结果如下:
在这里插入图片描述

http://www.xdnf.cn/news/847909.html

相关文章:

  • VPC是什么,VPC详解
  • AST入门与反混淆初体验
  • 史上最全Fragment介绍,包括fragment的定义,生命周期,用法
  • 详解nc命令
  • 各种GAN原理总结及对比
  • Linux命令(11)之chown
  • 别再问别人了,这是小白都能懂的拓扑图指南
  • 「NTFS:让你的硬盘更安全、更高效!」NTFS文件系统详解,
  • iperf3主页官方信息
  • 快速排序的三种方式以及快排的优化
  • CTF-密码学基础
  • Sonar简介及使用
  • nslookup命令详解
  • 【JavaWeb】-- thymeleaf视图模板技术
  • Acwing - 算法基础课 - 笔记(动态规划 · 二)
  • burst什么意思_burst是什么意思_burst的用法
  • 深入探讨Samba服务器的配置与使用
  • Linux基础命令:tar压缩命令
  • 10.Python从入门到精通—Python 列表,列表脚本操作符,列表截取,列表函数方法
  • 干货!一文读懂10种主流的图片格式
  • hint详解
  • 什么是AOI?
  • 国产化操作系统都有哪些?如何选择?
  • 【网络协议 02】ICMP协议报文
  • acl是什么
  • Qemu架构解析(二),涨知识
  • 字符串的全面解析
  • shiro(一):shiro基本概念及基本使用(认证、授权)
  • 手把手教你安装Kali Linux
  • PaddleOCR 的使用,极简介绍