美文网首页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