定义:如果在一个内部函数里,对外部作用域(单不是在全局作用域)的变量进行引用。
1 def outer(): 2 x=10 3 def inner():#条件一:内部函数 4 print(x)#条件二:对外部环境变量的一个引用 5 return inner #结论:内部函数就是一个闭包 6 7 #outer()() 8 #f=outer() 9 #f() 10 #inner()#局部变量,全局无法调用 11 12 f=outer() 13 f() 14
关于闭包:闭包=内部函数块 + 定义函数时的环境
下面的例子没有定义函数的环境,所以不是闭包
1 def outer1(): 2 x=10 3 def inner(): 4 c=100 5 print(c) 6 return inner 7 f=outer1() 8 f()
闭包作用:在不修改原有的功能基础上增加功能
1 import time 2 def foo(): 3 print('foo...') 4 def bar(): 5 print('bar...........') 6 7 8 9 def show_time(f): 10 def inner(): 11 start = time.time() 12 f() 13 end = time.time() 14 print('spend %s'%(end-start)) 15 return inner 16 17 18 foo=show_time(foo) 19 foo() 20 bar=show_time(bar) 21 bar()
原函数只实现了打印,但是我后面需要增加打印耗费时间,因此放在inner函数下面