【廖雪峰老师python教程】——装饰器
2024-08-27 03:31:03
装饰器
# 一个函数装饰器的列子
def log(func):
def wrapper(*args,**kwargs):
print('Name=%s'%func.__name__)
return func(*args,**kwargs)
return wrapper
@log
def Print():
print('2017-2-3')
return None
Print()
'''
观察上面的log,因为它是一个decorator,所以接受一个函数作为参数,并返回一个函数。
通过@方法调用后,调用log输入Print为参数函数,在wrapper中修改,然后整合成为新的函数返回
'''
D:\untitled1\venv\Scripts\python.exe D:/untitled1/装饰器.py
Name=Print
2017-2-3
常用装饰器模板
- 无参数的装饰器:【因为返回的那个
wrapper()
函数名字就是'wrapper'
,所以,需要把原始函数的__name__
等属性复制到wrapper()
函数中,否则,有些依赖函数签名的代码执行就会出错。】
import functools def log(func):
@functools.wraps(func)
def wrapper(*args, **kw):
print('call %s():' % func.__name__)
return func(*args, **kw)
return wrapper
- 有参数的装饰器:【因为返回的那个
wrapper()
函数名字就是'wrapper'
,所以,需要把原始函数的__name__
等属性复制到wrapper()
函数中,否则,有些依赖函数签名的代码执行就会出错。】
import functools def log(text):
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kw):
print('%s %s():' % (text, func.__name__))
return func(*args, **kw)
return wrapper
return decorator
装饰器案例
# 一个装饰器计算函数执行时间
import time, functools
def log(func):
@functools.wraps(func) # 保证函数名一致的方法
def wrapper(*args, **kw):
''' 下面三个为装饰器装饰后的功能增加项 '''
oldTime = time.process_time()
result = func(*args, **kw)
newTime = time.process_time()
print('函数 %s 运行时间为 %s ms' % (func.__name__ ,newTime - oldTime))
return result
return wrapper
@log
def test():
for x in range(1, 10000000):
x += 1
test()
友情链接:
最新文章
- [bigdata] flume file channel CPU消耗比 memory channel高的原因
- 莫名其妙MyEclipse
- <;Operating System>;进程调度
- toad的基本操作
- Ajax技术
- Java:那些把自己陷进去的误区(一)
- Linux系统管理命令之权限管理
- PCA算法是怎么跟协方差矩阵/特征值/特征向量勾搭起来的?
- 学习hibernate @Entity该导入哪个包
- TCP中close和shutdown之间的区别
- CentOS下安装gns3
- php curl request
- 2014ACMICPC亚洲区域赛牡丹江现场赛之旅
- Android学习笔记:ActionBar使用介绍
- [android]APP启动界面——SplashActivity
- 并发编程-JUC之Atomic
- 关于Java项目打包成Runnable jar文件后运行时图片不显示的问题
- redis 的简单使用
- HelloStruts
- 爬虫Scrapy框架