一:函数调用顺序:其他高级语言类似,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
)
|