• 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
    

      

  • 相关阅读:
    DAY7-面向对象之封装
    Java遇到的问题、错误——持续更新
    008单例、继承、final
    java一些使用
    2.1端口扫描器
    PyCharm设置
    常用算法
    PyCharm最新2018激活码,最新方法
    004数组
    042多进程
  • 原文地址:https://www.cnblogs.com/nerdlerss/p/7079920.html
Copyright © 2020-2023  润新知