定义:本质是函数(装饰其他函数),为其他函数添加附件功能的。
遵循原则:①不能修改被装饰函数的源代码
②不能修改被装饰函数的调用方式
组成:装饰器由高阶函数+内嵌函数+闭包组成
1、函数的调用顺序
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#-Author-Lian
#函数错误的调用方式
def func():                     #定义函数func()
    print("in the func")
    foo()                       #调用函数foo()
func()                          #执行函数func()
def foo():                      #定义函数foo()
    print("in the foo")
###########打印输出###########              #报错:函数foo没有定义
#NameError: name ‘foo‘ is not defined
#函数正确的调用方式
def func():                     #定义函数func()
    print("in the func")
    foo()                       #调用函数foo()
def foo():                      #定义函数foo()
    print("in the foo")
func()                          #执行函数func()
###########打印输出###########              
#in the func
#in the foo
总结:被调用函数要在执行之前被定义
2、高阶函数
满足下列条件之一就可成函数为高阶函数
某一函数当做参数传入另一个函数中
函数的返回值包含一个或多个函数
刚才调用顺序中的函数稍作修改就是一个高阶函数
#高阶函数
def func():                     #定义函数func()
    print("in the func")
    return foo()                #调用函数foo()
def foo():                      #定义函数foo()
    print("in the foo")
    return 100
res = func()                     #执行函数func()
print(res)                       #打印函数返回值
###########打印输出###########
#in the func
#in the foo
#100
从上面的程序得知函数func的返回值为函数foo的返回值,如果foo不定义返回值的话,func的返回值默认为None
原文:http://www.cnblogs.com/lianzhilei/p/5770672.html