zoukankan      html  css  js  c++  java
  • 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



  • 相关阅读:
    16日彻底去除安卓应用的内置广告
    配台600元的主机套装 自己组装 全新
    带记录功能的计算器
    华为8812 进入工程模式 和打电话黑屏问题
    买平板 四核 500~600左右对比
    querySelector()方法
    Javascript实例教程:querySelector()方法接受一个CSS查询并返回匹配模式的第一个子孙元素,如果没有匹配的元素则返回null。
    Android实用代码七段(二)
    Android实用代码七段(三)
    Firebug入门指南
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/7120450.html
Copyright © 2011-2022 走看看