• python中的装饰器


    什么是装饰器

    如果有函数A,B,C,已经所有编写完毕。这时你发现A, B, C都须要同一个功能,这时该怎么办? 

    答: 装饰器

    装饰器事实上就是一个函数,只是这个函数的返回值是一个函数

    个人理解。装饰器主要就是为了完毕上边的这个功能,将A, B, C 函数包裹在还有一个函数D中。D函数在A函数运行之前或之后,处理一些事情


    #!/usr/bin/env python 
    #coding:utf-8
    def SeparatorLine():
        print "############################"
    
    #装饰器带參数函数带參数    
    def DecratorArgFuncArg(f1,f2):
        def inner(func):
            def wrapper(arg):
                print "装饰器带參数函数带參数"
                f1()       
                result =  func(arg)
                f2()
                return result   
            return wrapper
        return inner
    
    #装饰器带參数函数不带參数
    def DecratorArgFuncNoArg(f1,f2):
        def inner(func):
            def wrapper():
                print "装饰器带參数函数不带參数"
                f1()       
                result=func()
                f2()
                return result
            return wrapper
        return inner
    
    #函数没有參数的装饰器
    def FuncNoArgDecrator(func):
        def wrapper():
            print "函数没有參数的装饰器"       
            func()
        return wrapper
    
    #函数有參数的装饰器
    def FuncArgDecrator(func):
        def wrapper(arg):
            print "函数有參数的装饰器"       
            func(arg)
        return wrapper
    
    #函数有返回值的装饰器
    def FuncReturnDecrator(func):
        def wrapper():
            print "函数有返回值的装饰器"       
            result=func()
            return result
        return wrapper
    
    #这两个函数用
    def login():
        print '開始登录'
       
    def logout():
        print '退出登录'
    
    @FuncArgDecrator
    def Lee(arg):
        print 'I am %s' %arg
    
    @FuncNoArgDecrator
    def Marlon():
        print 'i am Marlon'
    
    @DecratorArgFuncNoArg(login,logout)
    def Allen():
        print 'i am Allen'  
    
    @DecratorArgFuncArg(login,logout)
    def Aswill(name):
        print 'I am %s' %name  
    
    @FuncReturnDecrator
    def Frank():
        return 'I am frank'
    
    if __name__=='__main__':
        SeparatorLine()
        Lee('Lee')
        SeparatorLine()
        Marlon()
        SeparatorLine()
        Allen()
        SeparatorLine()
        Aswill('Aswill')
        SeparatorLine()
        result = Frank()
        print result



  • 相关阅读:
    房价
    Jsrender初体验
    GCD XOR UVA
    GCD
    Aladdin and the Flying Carpet LightOJ
    HDU6035 2017多校第一场1003 树形DP
    F
    C
    B
    An Easy Physics Problem HDU
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/7120450.html
Copyright © 2020-2023  润新知