闭包函数、装饰器

什么是闭包函数?

闭包函数就是一个函数嵌套在另一个函数里:

1
2
3
4
5
6
7
8
9
10
def ():
a = 1
def nei(): nei函数嵌套在wai函数里
b = a + 1
print('这是内部函数, a = %d, b = %d' % (a, b))
return a
return nei()

res = wai()
print(res)

以上代码在Sublime上的执行结果为:

1
2
3
这是内部函数, a = 1, b = 2
1
[Finished in 0.1s]

装饰器

装饰器的基本结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def (func):
def nei():
print('这是装饰器函数')
return func()
return nei


def work():
print('这是主函数')

work()


'''
这是装饰器函数
这是主函数
[Finished in 0.1s]
'''

在装饰器基本结构的基础上还可以添加主函数的参数和装饰器函数的参数来对不同的对象实现不同的装饰效果。

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
def dec(t): # ----------------------------------------------------装时期函数及其参数
def (func): # ---------------------------------------------将被装饰函数传入
def nei(var): # ------------------------------------------将被装饰函数的参数传入
if t == True: #---------------------------------------识别装时期函数的t参数
var += 1
print("Let's do it.")
else:
print("Never mind.")
return func(var) #------------------------------------调用被装饰函数
return nei
return wai

@dec(t = True)
def work(var):
print(var)

@dec(t = False)
def work_1(var):
print(var)

work(1)
print('---------------')
work_1(2)

# 执行结果:
'''
Let's do it.
2
---------------
Let's do it.
2
[Finished in 0.1s]
'''

Author: Ivan Sun
Copyright: 非商业自由转载(好像有人会转一样。。)