python函数修饰符@的作用是为现有函数增加额外的功能
不带参数
def without_arg(func):
def wrapper():
print("start")
func()
print("end")
return wrapper
@without_arg
def test():
print("This is a test!")
test()
"""
#输出
start
This is a test!
end
"""
带参数
def log(arg):
def _log(func):
def wrapper(*args,**kwargs):
print('log开始 ...',func.__name__, arg)
ret = func(*args,**kwargs)
print('log结束 ...')
return ret
return wrapper
return _log
@log('module1')
def test1(s):
print('test1 ..', s)
return s
@log('module1')
def test2(s1, s2):
print('test2 ..', s1, s2)
return s1 + s2
test1('a')
test2('a','bc')
"""
#输出
log开始 ... test1 module1
test1 .. a
log结束 ...
log开始 ... test2 module1
test2 .. a bc
log结束 ...
"""