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

本文深入解析了Python中闭包的概念,通过实例说明如何在内部函数中引用外部作用域的变量,以及闭包的构成要素。同时,介绍了装饰器的使用,展示如何在不修改原有函数的基础上增加新的功能,如计时器装饰器的应用。
378

被折叠的 条评论
为什么被折叠?



