函数内容

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
def div(className):
	def div_decorate(func):
		def func_wrapper(name):
			return "<div class=\"{1}\">{0}</div>".format(func(name),className)
		return func_wrapper
	return div_decorate


def p_decorate(func):
   def func_wrapper(name):
       return "<p>{0}</p>".format(func(name))
   return func_wrapper


@div("abcTest")
@p_decorate
def hello(name):
   return "Hello {0}!".format(name)

print(hello("World"))

打印结果

<div class="abcTest"><p>Hello World!</p></div>

  • 修饰器为高阶函数
  • 自上而下的结合
  • 执行 hello(name) 相当于先执行 p_decorate 中的 func_wrapper 再执行 div(className) 获得 div_decorate 以及 className 变量,而后返回 func_wrapper