一:函数调用顺序:其他高级语言类似,Python 不允许在函数未声明之前,对其进行引用或者调用
二:高阶函数
满足下列条件之一就可成函数为高阶函数
-
某一函数当做参数传入另一个函数中
-
函数的返回值包含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 ) t = 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 ) |