美文网首页Python
[Python]装饰器使用

[Python]装饰器使用

作者: _小老虎_ | 来源:发表于2018-08-21 14:49 被阅读3次
    • 兼容参数版:
    def site_catch_error(func):
        def _deco(*arg, **karg):
            try:
                return func(*arg, **karg)
            except Exception,e:
                print 'error:',e
                return []
    
        return _deco
    
    • 非语法糖装饰器
    # 使用装饰函数在函数执行前和执行后分别附加额外功能
    # -*- coding:gbk -*-
    '''示例2: 替换函数(装饰)
    装饰函数的参数是被装饰的函数对象,返回原函数对象
    装饰的实质语句: myfunc = deco(myfunc)'''
     
    def deco(func):
        print("before myfunc() called.")
        func()
        print("  after myfunc() called.")
        return func
     
    def myfunc():
        print(" myfunc() called.")
     
    myfunc = deco(myfunc)
     
    myfunc()
    myfunc()
    
    • 基本语法糖装饰
    # 使用语法糖@来装饰函数
    # -*- coding:gbk -*-
    '''示例3: 使用语法糖@来装饰函数,相当于“myfunc = deco(myfunc)”
    但发现新函数只在第一次被调用,且原函数多调用了一次'''
     
    def deco(func):
        print("before myfunc() called.")
        func()
        print("  after myfunc() called.")
        return func
     
    @deco
    def myfunc():
        print(" myfunc() called.")
     
    myfunc()
    myfunc()
    

    相关文章

      网友评论

        本文标题:[Python]装饰器使用

        本文链接:https://www.haomeiwen.com/subject/yrqjiftx.html