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

      

  • 相关阅读:
    ubuntu 安装nodejs
    在VMware下安装CentOS 7.6
    ogg基础知识整理
    Server2012多用户远程桌面及问题解决记录
    win10中批量新建文件夹
    word中去除所有table键
    PLSQL无法连接(不存在或找不到oci.dll)
    Oracle客户端安装及下载地址
    PLSQL官网下载地址
    问题解决:xampp中phpmyadmin“无法连接:无效的设置”
  • 原文地址:https://www.cnblogs.com/nerdlerss/p/7079920.html
Copyright © 2011-2022 走看看