一.基本
第一波 #### def foo(): print 'foo' foo #表示是函数 foo() #表示执行foo函数 #### 第二波 #### def foo(): print 'foo' foo = lambda x: x + 1 foo() # 执行下面的lambda表达式,而不再是原来的foo函数,因为函数 foo 被重新定义了
二.example
#一个参数
def w1(func): #func = f1
def inner(arg): #arg是f1的参数
print('auth %s'%arg) #新增加内容
return func(arg) #运行老f1
return inner #返回inner给新的f1
@w1
def f1(arg):
print('f1 %s'%arg)
f1('alex') #运行新的F1了
#二个参数
def w2(func):
def inner(arg1,arg2):
print("auth %s,%s"%(arg1,arg2))
return func(arg1,arg2)
return inner
@w2
def f2(arg1,arg2):
print("f2 %s,%s"%(arg1,arg2))
f2('tom','boy')
#N个参数
def w3(func):
def inner(*args,**kwargs):
print('auth')
return func(*args,**kwargs)
return inner
@w3
def f3(arg1,arg2,arg3):
print("f3 %s,%s,%s"%(arg1,arg2,arg3))
f3('tom','is','boy')
#一个函数被多个装饰器装饰
def w1(func):
def inner(*args,**kwargs):
print('w1')
return func(*args,**kwargs)
return inner
def w2(func):
def inner(*args,**kwargs):
print('w2')
return func(*args,**kwargs)
return inner
@w1
@w2
def f3(arg1,arg2,arg3):
print("f3 %s,%s,%s"%(arg1,arg2,arg3))
f3('tom','is','boy')
#通用装饰器
def Before(request,kargs):
print('before')
def After(request,kargs):
print('after')
def Filter(before_func,after_func):
def outer(main_func):
def wrapper(request,kargs):
before_result = before_func(request,kargs)
main_result = main_func(request,kargs)
after_result = after_func(request,kargs)
return wrapper
return outer
@Filter(Before, After)
def Index(request,kargs):
print('index')
Index('a','b')