内部函数和外部函数中被内部函数调用的变量组成了闭包。
1 def test(number):
2 print("--1--")
3
4 #解释器遇到定义函数的时候,直接跳过不执行。
5 def test_in(number2):
6 print("--2--")
7 print(number+number2)
8
9
10 print("--3--")
11 return test_in
12
13
14
15
16
17 #返回内部函数引用
18 t = test(100)
19
20 print("-----------分割线----------")
21
22 #调用内部函数
23 t(200)
--1--
--3--
-----------分割线----------
--2--
300
例子:函数line与变量a构成了闭包。
2 def line_conf(a):
3
4 def line(x):
5 return a*x
6
7 return line
8
9
10 line1 = line_conf(10)
11
12 print(line1('*'))
13 print(line1('-'))
1.闭包似优化了变量,原来需要类对象完成的工作,闭包也可以完成。
2.由于闭包引用了外部函数的局部变量,则外部函数的局部变量没有及时释放,消耗内存。