def star(func):
def inner(*args, **kwargs):
print("*" * 30)
func(*args, **kwargs)
print("*" * 30)
return inner
def percent(func):
def inner(*args, **kwargs):
print("%" * 30)
func(*args, **kwargs)
print("%" * 30)
return inner
@star
@percent
def printer(msg):
print(msg)
printer("Hello")
******************************
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Hello
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
******************************
@star
@percent
def printer(msg):
print(msg)
# 等效
def printer(msg):
print(msg)
printer = star(percent(printer))
import functools # function tools
def my_decorator(f):
@functools.wraps(f)
def function_that_runs_f():
print("Before!")
f()
print("After!")
return function_that_runs_f
@my_decorator
def my_func():
print("I'm in the function.")
my_function()