Python装饰器简单用法实例小结
时间:2022-07-27
本文章向大家介绍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相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》
您可能感兴趣的文章:
- Python中的各种装饰器详解
- 深入理解python中的闭包和装饰器
- Python装饰器的函数式编程详解
- 详解Python中的装饰器、闭包和functools的教程
- python 装饰器功能以及函数参数使用介绍
- Python中的多重装饰器
- Python装饰器decorator用法实例
- Python中装饰器高级用法详解
- Python的装饰器使用详解
- Python装饰器用法实例总结
- 12步教你理解Python装饰器
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- linux下安装boost库的完整步骤记录
- Linux下使用killall命令终止进程的8大用法实例详解
- 关于AIX挂载NFS写入效率低效的解决方法
- Linux查看进程的所有信息的方法示例
- 新版VPS主机管理面板WDCP安装及使用体验-国产简单易用型VPS面板
- linux中普通用户的定时任务详解
- 详解在Linux中清空或删除大文件内容的5种方法
- 教你一招实现Linux中的文本比对
- 怎么禁用 Ubuntu 服务器中终端欢迎消息中的广告
- Linux系统下部署项目的设置方法
- Linux中设置路由以及虚拟机联网图文详解
- 在Linux中如何一次重命名多个文件详解
- Vim自定义高亮分组以及一些实用技巧小结
- Linux redis-Sentinel配置详解
- 使用 Apache Web 服务器配置两个或多个站点的方法