如果在一个函数的内部定义另外一个函数,外部的函数叫做外函数,内部的函数叫做内函数
如果在一个外部函数中定义一个内部函数,并且外部函数的返回值是内部函数,就构成了一个闭 包,则这个内部函数就被称为闭包【closure】实现函数闭包的条件:
- 必须是函数嵌套函数
- 内部函数必须引用一个定义在闭合范围内的外部函数的变量, 内部函数引用外部变量
外部函数必须返回内部的函数
# 闭包: 如果在一个外部函数中定义一个内部函数,并且外部函数的返回值是内部函数,就构成了一个闭包,则这个内部函数就被称为闭包【closure】
# 最简单的闭包
# 外 部 函 数
def outer():
# 内部函数
def inner():
print("lala")
return inner # 将内部函数返回
fn = outer() # fn =====> inner函数fn() # 相当于调用了inner函数 输出 lala
# 内部函数使用外部函数的变量
def outer1(b):
a = 10
def inner1():
# 内部函数可以使用外部函数的变量
print(a + b)
return inner1
fun1 = outer1(12)
fun1()
'''
注意:
- 当闭包执行完毕后,仍然能够保存住当前的运行环境
- 闭包可以根据外部作用域的局部变量得到不同的效果,类似于配置功能,类似于我们可以通过修改外部 变量,闭包根据变量的改变实现不同的功能.
应用场景: 装饰器
'''
装饰器:
在代码运行期间,可以动态增加函数功能的方式,被称为装饰器【Decorator】 通过闭包函数实现
也就是说,在不修改原函数的基础上,给原函数增加功能
好处:在团队开发中,如果两个或者两个以上的程序员会用到相同的功能,但是功能又有细微的 差别,采用装饰器:相互不影响,代码简化
def test():
print("你好啊!") # test()
# 需求: 给上面的函数test增加一个功能, 输出 我很好
# 第一种方式: 修改了原来的函数
'''
def test():
print("你好啊!")
print("我很好")
test()
# 第二种方式: 定义一个新函数,在新函数中调用原函数,然后追加功能
def test1():
test()
print("我很好")
test1()
'''
需要详细资料的同学私聊DD我,无偿分享哟~