有时候我们希望在python在执行某些函数时能够自动添加一些操作在函数执行前后,但是如果需要修改的函数过多那么就很繁琐,因此需要使用python装饰器来进行修饰
下面列举如何使用python装饰器
我们需要在函数执行前后打印一句话,可以首先定义一个装饰器
def log(func):
def wrap():
print('here is prefix')
func()
print('here is suffix')
return wrap
然后将装饰器加在定义的函数上面
@log
def now():
print('this is test')
执行函数
now()
结果
上面只是一个最简单修饰器,
func表示要被装饰的函数,我们可以使用func.__name__获取函数名字
warp表示装饰器
log表示使用装饰器也就是@log,这个我们可以根据喜好随便定义
如果只是需要在函数执行前添加一些操作我们可以这样定义
def log(func):
def wrap():
print('here is prefix')
return func
return wrap
这个还可以改成修饰带参数函数的装饰器
def log(func):
def wrap(*args,**kw):
print('here is prefix')
return func(*args,**kw)
return wrap
==================================================================
手动分割线,大神和小弟的区别就在这里了
如果装饰器本身就需要传递参数,那么我们就需要在上面的基础上再嵌套一层
def decorator(text):
def log(func):
def wrap(*args,**kw):
print('%s %s():' % (text,func.__name__))
return func(*args,**kw)
return wrap
return log
@decorator('hello')
def now():
print('this is test')
这个没什么别的,多看几遍就能理解,如果理解不来就多练几遍就看懂了
===================================================================
手动分割线
以上就是装饰器的全部内容了,当然,修饰器的写法很灵活,我们可以再扩展一下
def log():
def wrap(func):
print("Start")
return func
return wrap
@log()
def function_A():
print("Execute some code")
这个和上面那个类似,不过是func的位置由log变为wrap,这个func位置不固定,可以根据需要修改。不过需要注意的是这一块func的位置不同,使用时的括号就需要改变,使用的细节也需要改变
def log(func):
def wrap(*args,**kw):
print("Start")
return func()
return wrap
@log
def function_A():
print("Execute some code")