装饰器,简单来说就是在优雅的在你执行函数的时候额外帮你去做一些事情,这个事情一般都是通用的,例如打印日志,监察用户权限等操作
其实装饰器原理并不难,所以这里不多讲解,直接举例说明,这里都是简单的说明,装饰器还有很多知识,想要深究可以查查相关知识
简单的装饰器
import time
def count_time(func):
def wrapper(*args, **kargs):
print("开始调用函数:"+func.__name__)
print("调用参数为:"+str(args))
start_time = time.time()
ret = func(*args, **kargs)
exec_time = time.time() - start_time
print("调用完了,用时"+str(exec_time))
return ret
return wrapper
@count_time(func=11)
def do_somethin(num):
print("do")
time.sleep(2)
print("do ok")
return num
print(do_somethin)
print(do_somethin(100))

带参数的装饰器
import time
def count_time(who):
def wrapper(func):
def inner_wrapper(*args, **kargs):
print("用户"+who+"开始调用函数:"+func.__name__)
print("调用参数为:"+str(args))
start_time = time.time()
ret = func(*args, **kargs)
exec_time = time.time() - start_time
print("调用完了,用时"+str(exec_time))
return ret
return inner_wrapper
return wrapper
@count_time(who="wxl")
def do_somethin(num):
print("do")
time.sleep(2)
print("do ok")
return num
print(do_somethin)
print(do_somethin(100))

类实现装饰器
import time
class count_time(object):
def __init__(self,func):
self.func = func
def __call__(self,*args, **kargs):
print("开始调用函数:" + self.func.__name__)
print("调用参数为:" + str(args))
start_time = time.time()
ret = self.func(*args, **kargs)
exec_time = time.time() - start_time
print("调用完了,用时" + str(exec_time))
return ret
@count_time
def do_somethin(num):
print("do")
time.sleep(2)
print("do ok")
return num
print(do_somethin)
print(do_somethin(100))

类实现装饰器,带参数
import time
class count_time(object):
def __init__(self,who):
self.who = who
def __call__(self,func):
def wrapper(*args, **kargs):
print("开始调用函数:" + func.__name__)
print("调用参数为:" + str(args))
start_time = time.time()
ret = func(*args, **kargs)
exec_time = time.time() - start_time
print("调用完了,用时" + str(exec_time))
return ret
return wrapper
@count_time(who="wxl")
def do_somethin(num):
print("do")
time.sleep(2)
print("do ok")
return num
print(do_somethin)
print(do_somethin(100))

推荐公众号:龙叔18岁


被折叠的 条评论
为什么被折叠?



