例1:
def deco(func):
def wrappedFunc():
return "Hello World_"+func()
return wrappedFunc#很恶心
@deco
def f():
return "I am f"
def g():
return "I am g"
print(f())
print(g())
运行结果:
例2:
def deco(prefix):
def _deco(func):
def wrappedFunc():
return prefix+func()
return wrappedFunc
return _deco
@deco("second_")
@deco("first_")
def f():
return "I am f"
print(f())
运行结果:
deco函数和wrappedFunc函数之间增加了一个_deco函数,这是为了处理deco函数传入的prefix参数。对于修饰器的传入参数prefix,修饰器不会立即将带待修饰的函数作为参数传入完成修饰,而是先做了一个预处理,返回了一个_deco函数,而这个_deco函数才是真正被f函数调用的修饰器。