python-高级编程-03

【装饰器】

 将方法和函数封装,使之可以对其他函数的功能进行增强。

#coding:utf8
def mydecorator(function):
    def _mydecorator(*args,**kw):

        #在调用实际函数之前的准备工作
        print 'start'
        res = function(*args,**kw)
        #做完某项填充工作
        print 'end'
        return res
    return _mydecorator

@mydecorator
def demo():
    print 'This is test'

demo()

 输出

start
This is test
end

含有参数的装饰器:

def mydecorator(arg1,arg2):
    def _mydecorator(func):
        def __mydecorator(*args,**kw):
           #在调用实际参数之前所做的工作
            print arg1
            res = func(*args,**kw)
           #做完某些填充工作之后
            print arg2
            return  res
        return __mydecorator
    return  _mydecorator

@mydecorator('123','5443')
def bar():
    print '@@@'

bar()

  

以及;类装饰器

class demo(object):
    def __init__(self,func):

        self._func = func

    def __call__(self):
        print 'start'
        self._func()
        print 'end'

@demo
def f1():
    print 'bar'

f1()

 【2】常用装饰器

import signal,functools

class  TimeourError(Exception):
    pass


def timeout(seconds,error_message= 'Function call timed out'):
    def decorated(func):
        def _headle_timeout(signum,frame):
            raise TimeourError(error_message)
        
        def wrapper(*args,**kwargs):
            signal.signal(signal.SIGALRM,_headle_timeout)
            signal.alarm(seconds)
            try:
                result = func(*args,**kwargs)
            finally:
                signal.alarm(0)
            return  result
        return functools.wraps(func)(wrapper)
    return decorated

  

原文地址:https://www.cnblogs.com/nerdlerss/p/7079920.html