来点干货,看懂此代码的作用就明白了.
Topic source装饰带参数的函数
import datetime
def logger(func):
def wrapper(*args, **kvargs):
start_time = datetime.datetime.now()
func(*args, **kvargs)
end_time = datetime.datetime.now()
print("Func {} called. Arguments: {}, {}. Time used: {}".format(
func.__name__,
args,
kvargs,
end_time - start_time
))
return wrapper
@logger
def sum(a, b):
print(a + b)
if __name__ == "__main__":
sum(1, 2)
带参数的装饰器
import datetime
import logging
logging.basicConfig(
level=logging.DEBUG,
format='%(levelname)-8s %(message)s',
datefmt='%m-%d %H:%M',
filename='myapp.log',
filemode='a'
)
logger = logging.getLogger(__name__)
def logTest(level, *args, **kvargs):
def wrapper(func):
log = getattr(logger, level, "info")
log(
"Func {} called at {}. Other infos: {}, {}".format(
func.__name__,
datetime.datetime.now(),
args,
kvargs
)
)
return func
return wrapper
@logTest('debug', 'ttwshell.com')
def test():
print("OK")
if __name__ == "__main__":
test()
带参数的装饰器修饰 + 带参数的函数
import datetime
import logging
logging.basicConfig(
level=logging.DEBUG,
format='%(levelname)-8s %(message)s',
datefmt='%m-%d %H:%M',
filename='myapp.log',
filemode='a'
)
logger = logging.getLogger(__name__)
def logTest(level, *args, **kvargs):
def wrapper(func):
def inner(*args, **kvargs):
log = getattr(logger, level, "info")
log(
"Func {} called at {}. Other infos: {}, {}".format(
func.__name__,
datetime.datetime.now(),
args,
kvargs
)
)
return func(*args, **kvargs)
return inner
return wrapper
@logTest('debug', 'liaoxuefeng.com')
def sum(a, b):
return a + b
if __name__ == "__main__":
print(sum(100, 88))
- 1
loveprruy
简单的计时测试程序