zoukankan      html  css  js  c++  java
  • python3-day4(装饰器)

    一.基本

      

    第一波 ####
    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')
    

      

  • 相关阅读:
    gj10 python socket编程
    自定义Git
    使用GitHub
    标签管理之操作标签
    标签管理之创建标签
    标签管理
    git分支管理之多人协作
    git分支管理之Feature分支
    git分支管理之Bug分支
    git分支管理之分支管理策略
  • 原文地址:https://www.cnblogs.com/weibiao/p/5225897.html
Copyright © 2011-2022 走看看