python 装饰器的使用示例
作者:南方的墙 发布时间:2021-05-15 00:52:09
标签:python,装饰器,示例
无参修饰 ,无参数时不需要调用
def log1(func):
func()
@log1
def test():
print('test:')
有参修饰
def log2(func):
def inner(*args, **kwargs):
func(*args, **kwargs)
return inner
@log2
def test(num):
print('testlog2:',num,test.__name__)
test(20) #相当于log(test(20))
@wraps可以保证装饰器修饰的函数的name的值保持不变
不带参数的装饰器
def log3(func):
@wraps(func)
def inner(*args, **kwargs,):
func(*args, **kwargs)
return inner
@log3
def test(num):
print('testlog3:',num,test.__name__)
test(30) #相当于log(test(30))
带参数的装饰器
def log4(level):
def log(func):
@wraps(func)
def inner(*args, **kwargs,):
if level == "warn":
print("%s is running" % func.__name__)
func(*args, **kwargs)
return inner
return log
@log4(level="warn")
def test(num):
print('testlog4:', num, test.__name__)
test(40)
实现带参数和不带参数的装饰器自适应
def log(arg):
if callable(arg): # 判断参入的参数是否是函数,不带参数的装饰器调用这个分支
def log3(func):
@wraps(func)
def inner(*args, **kwargs, ):
func(*args, **kwargs)
return inner
return log3
else:
def log4(func):
@wraps(func)
def inner(*args, **kwargs,):
if arg == "warn":
print("%s is running" % func.__name__)
func(*args, **kwargs)
return inner
return log4
@log(arg=None)
def test(num):
print('testlog:', num, test.__name__)
test(0)
返回入参出参
def log5(func):
def inner(*args, **kwargs):
print('入参:',func.__name__, args, kwargs)
res =func(*args, **kwargs)
print('出参:',func.__name__, res)
return res
return inner
@log5
def test(num):
print('testlog5:', num, test.__name__)
return num
print(test(50))
类装饰器
class Loging:
def __init__(self,level):
self.level = level
def __call__(self,func):
@wraps(func)
def inner(*args, **kwargs):
if self.level == "warn":
self.notify(func)
func(*args, **kwargs)
return inner
def notify(self,func):
print ("%s is running" % func.__name__)
@Loging(level="warn")
def test(num):
print('testLoging:', num, test.__name__)
test(0)
来源:https://www.cnblogs.com/shuzf/p/13434477.html
0
投稿
猜你喜欢
- 首先来看一个封装的curl函数function request_post($url = '', $param = '
- 本文实例讲述了python通过urllib2获取带有中文参数url内容的方法。分享给大家供大家参考。具体如下:对于中文的参数如果不进行编码的
- 在django操作数据库的时候如何找出内容不为空的数据呢?from django.db.models import Qclass Index
- SQL Server所谓的分布式查询(Distributed Query)是能够访问存放在同一部计算机或不同计算机上的SQL Server或
- 如果是在Oracle10g之前,删除一个表空间中的数据文件后,其文件在数据库数据字典中会仍然存在,除非你删除表空间,否则文件信息不会清除。但
- 自己前端开发中常用到的一些技巧及问题解决方法,会常更新,希望对前端路上的朋友有帮助。1、文章标题列表中日期居右显示的方法(提供了两种方法,使
- 一、多项式拟合多项式拟合的话,用的的是numpy这个库的polyfit这个函数。那么多项式拟合,最简单的当然是,一次多项式拟合了,就是线性回
- 相同点都属于序列类型的数据所谓序列类型的数据,就是说它的每一个元素都可以通过指定一个编号,行话叫做“偏移量”的方式得到,而要想一次得到多个元
- 察者模式定义定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖都会收到通知并自动更新。观察者模式提供了一种对象设计,让
- 一个Javascript 的类库,用于table内容排序。使用很方便,不用每次都去调用数据库了。特别适合多表查询的排序。加上<tbod
- 最近听了张江老师的深度学习课程,用Pytorch实现神经网络预测,之前做Titanic生存率预测的时候稍微了解过Tensorflow,听说T
- 首先来看一个小程序,这个是计量所花费时间的程序,以下是以往的解决示例from functools import wraps, partial
- 2020年11月22日最新分享pycharm激活码,这次分享的pycharm激活码适用pycharm2020最新版及pycharm2019、
- 北京邮电大学 张剑XML的局限性目前,许多Web网站的内容数据都存放在数据库或数据文件中。对于Web程序开发人员来说,如果要想把有用的信息从
- 前言一般的反爬措施是在多次请求之间增加随机的间隔时间,即设置一定的延时。但如果请求后存在缓存,就可以省略设置延迟,这样一定程度地缩短了爬虫程
- 对于大前端来说,JS可谓是我们的神器,从页面的效果到数据的传递,再到后台的业务,无处不充斥着JS的身影,但是万能的JS也有贪玩的时候,某一时
- //香水坏坏 AT 06-07-25 //郁闷的事情总是接连不断,无形的压力来自内心的恐惧 大家在用.net进行数据操作
- 表单的验证一直是网页设计者头痛的问题,表单验证类 Validator就是为解决这个问题而写的,旨在使设计者从纷繁复杂的表单验证中解放出来,把
- 在python中,我们定义好一个字符串,如下所示。在python中定义个字符串然后把它赋值给一个变量。我们可以通过下标访问单个的字符,跟所有
- 介绍本期案例是带着大家制作一个属于自己的GUI图形化界面—>用于设计签名的哦(效果如下图),是不是感觉很好玩,是不