zoukankan      html  css  js  c++  java
  • python装饰器

    一:函数调用顺序:其他高级语言类似,Python 不允许在函数未声明之前,对其进行引用或者调用

    二:高阶函数

    满足下列条件之一就可成函数为高阶函数

    1. 某一函数当做参数传入另一个函数中

    2. 函数的返回值包含n个函数,n>0

    三:内嵌函数和变量作用域:

    定义:在一个函数体内创建另外一个函数,这种函数就叫内嵌函数(基于python支持静态嵌套域)

    四:闭包:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是 closure

    六:装饰器应用案例:

    装饰器功能:函数超时则终止

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    # -*- coding: utf-8 -*-  
    from threading import Thread  
    import time  
       
    class TimeoutException(Exception):  
        pass  
       
    ThreadStop = Thread._Thread__stop#获取私有函数  
       
    def timelimited(timeout):  
        def decorator(function):  
            def decorator2(*args,**kwargs):  
                class TimeLimited(Thread):  
                    def __init__(self,_error= None,):  
                        Thread.__init__(self)  
                        self._error =  _error  
                           
                    def run(self):  
                        try:  
                            self.result = function(*args,**kwargs)  
                        except Exception,e:  
                            self._error =e  
       
                    def _stop(self):  
                        if self.isAlive():  
                            ThreadStop(self)  
       
                = TimeLimited()  
                t.start()  
                t.join(timeout)  
            
                if isinstance(t._error,TimeoutException):  
                    t._stop()  
                    raise TimeoutException('timeout for %s' % (repr(function)))  
       
                if t.isAlive():  
                    t._stop()  
                    raise TimeoutException('timeout for %s' % (repr(function)))  
       
                if t._error is None:  
                    return t.result  
       
            return decorator2  
        return decorator  
      
    @timelimited(2)  
    def fn_1(secs):  
        time.sleep(secs)  
        return 'Finished'  
           
    if __name__ == "__main__":  
        print fn_1(4)
  • 相关阅读:
    Linux 常用命令
    Oracle DG 三种模式(转)
    S5PV2210
    Timer wheel etc.
    SCM etc.
    负载均衡 IO etc.
    Remoting,OData Snippet Compiler等
    displaytag 动态列实现
    <display:column>属性解释
    <display:table>属性解释
  • 原文地址:https://www.cnblogs.com/ws0751/p/6902175.html
Copyright © 2011-2022 走看看