def ppd(): """一个打印ppd的函数的函数""" print(ppd.__name__) #查看字符串格式的函数名 print(ppd.__doc__) #document
from functools import wraps def wrapper(func): @wraps(func) def inner(*args, **kwargs): print("在被装饰函数之前要做的事") ret = func(*args, **kwargs) print("在被装饰函数之后要做的事") return ret return inner @wrapper def ppd(): print("once test") return "second test" ret = ppd() print(ret)
import time flag = True # 控制装饰器是否工作 def timer_out(flag): def timer(func): def inner(*args, **kwargs): if flag: start = time.time() ret = func(*args, **kwargs) end = time.time() print(end - start) return ret else: ret = func(*args, **kwargs) return ret return inner return timer @timer_out(flag) # timer = timer_out(flag) --> #test_one = timer(test_one) def test_one(): time.sleep(0.1) print("我是第一个函数") @timer_out(flag) # timer = timer_out(flag) --> #test_two = timer(test_two) def test_two(): time.sleep(0.1) print("我是第二个函数") test_one() test_two()
flag = True # 控制装饰器是否工作 def wrapper_out(flag): def wrapper(func): def inner(*args, **kwargs): ret = func(*args, **kwargs) return ret return inner return wrapper @wrapper_out(flag) # wrapper = wrapp_out(flag) --> #test_one = wrapper(test_one) def test_one(): print("我是第一个函数") @wrapper_out(flag) # wrapper = wrapp_out(flag) --> #test_two = wrapper(test_two) def test_two(): print("我是第二个函数") test_one() test_two()
def wrapper1(func): def inner1(): print("在wrapper1中,在被装饰函数之前要做的事") ret = func() print("在wrapper1中,在被装饰函数之后要做的事") return ret return inner1 def wrapper2(func): def inner2(): print("在wrapper2中,在被装饰函数之前要做的事") ret = func() print("在wrapper2中,在被装饰函数之后要做的事") return ret return inner2 @wrapper1 @wrapper2 def ppd(): print("sss") return "xxx" ret = ppd() print(ret)