Python装饰器简单用法实例小结
作者:darkfour 发布时间:2022-01-18 22:19:40
标签:Python,装饰器
本文总结分析了Python装饰器简单用法。分享给大家供大家参考,具体如下:
装饰器在python中扮演着很重要的作用,例如插入日志等,装饰器可以为添加额外的功能同时又不影响业务函数的功能。
比如,运行业务函数fun()
同时打印运行花费的时间
1. 运行业务函数fun()
同时打印运行花费的时间
import time
def dec(fun):
start = time.time()
fun()
end = time.time()
a = end - start
print a
def myfun():
print 'run myfunction'
dec(myfun)
运行结果
(virt2) root@ubuntu:/home/z# python z.py
run myfunction
0.00108599662781
但是每次运行myfun都要调用dec,下面作下变动解决这个问题
2.
import time
def dec(fun):
def wrap():
start = time.time()
fun()
end = time.time()
a = end - start
print a
return wrap
def myfun():
print 'run myfunction'
myfun=dec(myfun)
myfun()
运行结果:
(virt2) root@ubuntu:/home/z# python z.py
run myfunction
0.00122618675232
这个装饰器dec就实现了,并且不影响函数myfun功能
3. 装饰器@符
import time
def dec(fun):
def wrap():
start = time.time()
fun()
end = time.time()
a = end - start
print a
return wrap
@dec
def myfun():
print 'run myfunction'
myfun()
结果
(virt2) root@ubuntu:/home/z# python z.py
run myfunction
0.000470876693726
使用了@后,就不用给myfun重新赋值了
@dec
就相当于myfun=dec(myfun)
例子:
def level(leveel):
def debug(func):
def wrapper(*args, **kwargs):
print("[DEBUG]: enter {}()".format(func.__name__),leveel)
return func(*args, **kwargs)
return wrapper
return debug
@level(leveel='debuging')
def say(something):
print ("hello {}!".format(something))
say(123)
输出:
('[DEBUG]: enter say()', 'debuging')
hello 123!
'''
class logging(object):
def __init__(self, func):
self.func = func
def __call__(self, *args, **kwargs):
print ("[DEBUG]: enter function {func}()".format(
func=self.func.__name__))
return self.func(*args, **kwargs)
@logging
def say(something):
print ("say {}!".format(something))
'''
class logging(object):
def __init__(self, level='INFO'):
self.level = level
def __call__(self, func): # 接受函数
def wrapper(*args, **kwargs):
print ("[{level}]: enter function {func}()".format(
level=self.level,
func=func.__name__))
func(*args, **kwargs)
return wrapper #返回函数
@logging(level='INFO')
def say(something):
print ("say {}!".format(something))
say(123)
输出:
[INFO]: enter function say()
say 123!
希望本文所述对大家Python程序设计有所帮助。
来源:https://blog.csdn.net/darkfour/article/details/74747768


猜你喜欢
- 前言之前提交的github copilot技术预览版申请,今天收到准入邮件,于是安上试一试这个准备把我送去电子厂上班的copy a lot
- 本文为大家分享了mysql 8.0.16 压缩包安装配置方法,供大家参考,具体内容如下运行环境:Windows 10 x641、下载zip安
- 本文讲述了python开发之IDEL(Python GUI)的使用方法。分享给大家供大家参考,具体如下:在安装完Python后,我们希望能够
- 在Bootstrap的官网上,提供了一种导航栏的组件:只要在站点文件夹放好JQ与Bootstrap输入如下代码: <!DOCTYPE
- 一、连接MySQL(和PHP搭配之最佳组合)格式: -h主机地址 -u用户名 -p用户密码例1:连接到本机上的MySQL。首先在打开DOS窗
- 数据读取与保存Text文件对于 Text文件的读取和保存 ,其语法和实现是最简单的,因此我只是简单叙述一下这部分相关知识点,大家可以结合de
- 登录注册系统是日常上网最普通的操作,我设了一个分类一步步完善注册登录系统,若哪里有误,请见谅。所用语言:php数据库 :mysql本次实现功
- python3 读取串口数据 demo最近在写一个demo,zigbee串口连接树莓派,树莓派使用串口通信接受zigbee穿过来得值。其中我
- 本文实例讲述了PHP实现的微信公众号扫码模拟登录功能。分享给大家供大家参考,具体如下:PHP微信公众号扫码模拟登录功能功能只是将:https
- 安装你可以从PyPI上直接安装这个库:pip install itsdangerous适用案例在取消订阅某个通讯时,你可以在URL里序列化并
- 刚开始接触Python,首先要解决的就是Python开发环境的搭建。目前比较好用的Python开发工具是PyCharm,他有社区办和专业版两
- 问题:简单版连连看小游戏一个分割成w*h个正方格子的矩形板上,每个正方格子可以有游戏卡,也可以没有游戏卡两个游戏卡之间有一条路径相连需满足以
- //********************************************************************
- 下面是用SA-FileUp组件上传一个HTML文件的程序:fileup.htm < HTM
- 在这篇文章里,我们将会探索如何使用Python语言作为一个工具来检测Linux系统各种运行信息。让我们一起来学习吧。哪种Python?当我提
- 我们在做接口测试时,除了常见的http接口,还有一种比较多见,就是socket接口,今天讲解下怎么用Python进行websocket接口测
- dssaa 问:求一个如奥运倒计时牌那样显示的倒计时程序突然想到这样的一个小程序,不知道能不能做,比如我要在我的主页上挂一个页面,上面只显示
- 首先是安装好PHP之后配置环境变量然后在cmd中输入php -v 能看到版本号即为配置好了之后在sublime中新建编译系统,输入代码{&q
- 第一步在你的需要全文搜索的列上点击 全文搜索full text类型索引,注意我的例子是该列是个longText类型的列第一步建立fullte
- 目录前言连接管理额外连接管理端口总结前言下面这个报错,相信大多数童鞋都遇见过;那么碰到这个问题,我们应该怎么办呢?在MySQL 5.7及之前