python装饰器

 

#装饰函数和方法

def foo():
    print 'foo'
  
def foo():
    print 'before do something'
    print 'foo'
    print 'after'
 
def foo():
    print 'foo'
     
def wrapper(func):
    print 'before'
    func()
    print 'after'
      
wrapper(foo)
 
def foo():
    print 'foo'
     
def wrapper(func):
    def result():
        print 'before'
        func()
        print 'after'
    return result
Do = wrapper(foo)
Do()
     
def wrapper(func):
    def result():
        print 'before'
        func()
        print 'after'
    return result
 
@wrapper
def foo():
    print 'foo'
 
foo()

 

#带参数的装饰器

#在函数执行前后,执行任意函数

#!/usr/bin/env python
#coding:utf-8
 
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)
            if(before_result != None):
                return before_result;
             
            main_result = main_func(request,kargs)
            if(main_result != None):
                return main_result;
             
            after_result = after_func(request,kargs)
            if(after_result != None):
                return after_result;
             
        return wrapper
    return outer
     
@Filter(Before, After)
def Index(request,kargs):
    print 'index'
          
if __name__ == '__main__':
    Index(1,2)

 

def outer(fun):
  def wrapper(arg):
    print '验证'
    result = fun(arg)
    print 'ok'
    return result
  return wrapper

@outer
def Func1(arg):
  print 'func1',arg
  return 'return'
#@outer = outer(Func1)

response = Func1('li')
print response

#装饰类

 

posted @   muzinan110  阅读(141)  评论(0编辑  收藏  举报
编辑推荐:
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示