闭包:
闭包的本质就是函数嵌套,就是在函数里面定义函数,
内部函数可以引用外部函数的参数和变量
参数和变量不会被垃圾回收机制给回收
闭包的用途:可以存循环的索引值、做私有变量计数器
什么是闭包:
# 定义一个函数
deftest(number):
# 在函数内部再定义一个函数,并且这个函数用到了外边函数的变量,那么将这个函数以及用到的一些变量称之为闭包
deftest_in(number_in):
print("in test_in 函数, number_in is %d"% number_in)
returnnumber+number_in
# 其实这里返回的就是闭包的结果
returntest_in
# 给test函数赋值,这个20就是给参数number、
ret = test(20)
# 注意这里的100其实给参数number_in
print(ret(100))
#注 意这里的200其实给参数number_in
print(ret(200))
运行结果:
intest_in 函数, number_inis100
120
intest_in 函数, number_inis200
220
注意点:
由于闭包引用了外部函数的局部变量,则外部函数的局部变量没有及时释放,消耗内存
装饰器:
装饰器就是用于拓展函数功能的一种函数,它的特殊之处,在于它的返回值也是一个函数,使用装饰器的好处就是,在不用更改原函数代码的前提下,给函数增加新的功能