def make_bold(func):
def wrapper():
return "<b>%s</b>" % func()
return wrapper
@make_bold
def get_content():
return "Hello World"
print(get_content())//输出为:<b>Hello World</b>
添加@make_bold注释的get_content()的定义等价于:
get_content=make_bold(get_content)
实现带参数的装饰器
def make_header(level):
print("Create decorator")
def decorator(func):
print("Initialize")
def wrapper():
print("call")
return "<h{0}>{1}</h{0}>".format(level,func())
return wrapper
return decorator
@make_header(2)
def get_content():
return "博主是个帅哥"
print(get_content())
输出为:
Create decorator
Initialize
call
<h2>博主是个帅哥</h2>
其实,带注释@make_header(2)的get_content()函数的定义,等价于
d=make_header(2)
get_content=d(get_content)
装饰有参数的函数
这个其实很简单
def make_bold(func):
def wrapper(name):
return "<b>%s</b>" % func(name)
return wrapper
@make_bold
def get_content(name):
return "Hello Mr."+name
print(get_content("博主"))
添加@make_bold注释的get_content()的定义等价于:
get_content=make_bold(get_content)
因为make_bold的返回值wrapper函数代表的是get_content,所以装饰带有参数的的函数,这个参数应该设置在wrapper函数上。