版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_40603236/article/details/82345258
什么是装饰器,装饰器是 Python 中特殊的语法糖, 它的作用就是用来装扮函数
在开发过程中我们都要遵循 开放封闭 原则 ,尽量别改动原来的代码,更多的是扩长代码功能
怎么在不修改代码的前提做到给代码加功能呢,那就是装饰器出场的时候了
# coding:utf-8
def test (func):
"""基础装饰器"""
def swap ():
print ('---1------')
func ()
print ('----2----')
return swap
@test
def test2 ():
print (2222)
test2 ()
def f1 (func):
"""对带参数的函数进行装饰"""
def wapper (*args, **kwargs):
print ('对带参数的函数进行装饰')
func (*args, **kwargs)
return wapper
@f1
def test3 (x, y):
print (x + y)
test3 (1, 4)
def f2 (func):
"""对有返回值的函数进行装饰"""
def wapper ():
print ('对有返回值的函数进行装饰')
ret = func ()
return ret
return wapper
@f2
def test4 ():
return 22
print (test4 ())
def f3 (func):
"""
通用装饰器
即对有参数有返回值的函数进行装饰
"""
def wapper (*args, **kwargs):
ret = func (*args, **kwargs)
return ret
return wapper
@f3
def test5 (a, b):
print ('-----test5------')
return (a * b)
print (test5 (2, 4))
def f4 (parameter):
"""
装饰器自身带有参数
:param parameter:
:return:
"""
def f (func):
print ('我要开始加入我的装饰器参数了(%s)' % parameter)
def wapper (*args, **kwargs):
print ('---带有参数的装饰器-----')
c = func (*args, **kwargs)
return c
return wapper
return f
@f4 ('haha')
def test6 (a, b):
print ('----test6----')
return a - b
print (test6 (10, 3))
装饰器基本应用(权限验证,日志写入、等)
这里我们以日志为例
import os,time
# 装饰器使用实例(写入日志)
def logfunc(func):
def wapper(*args,**kwargs):
starttime=time.time()
ret = func (*args, **kwargs)
endtime=time.time()
runtime=endtime-starttime
with open(os.path.dirname(os.path.abspath('.'))+r"/test.log",'a') as f:
f.write(" 正在运行的函数是 (%s),\n"
"此函数使用到的参数是 (%s,%s),\n"
"返回值是(%s),\n "
"程序运行时间time: %s"%(func.__name__,*args,*kwargs,ret,runtime))
return ret
return wapper
@logfunc
def test_log(path,name):
print(path)
print(name)
test_log('当前路径','文件名')