在学装饰器之前首先得了解闭包这个概念,查阅了网上众多资料后,我来谈谈我对闭包的理解
闭包的定义
以下引用自百度
在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包。
闭包可以用来在一个函数与一组“私有”变量之间创建关联关系。在给定函数被多次调用的过程中,这些私有变量能够保持其持久性。
简单来说,内嵌函数引用外部函数变量(指包含内嵌函数的外函数中的变量,如下print_msg函数中的a)并返回内嵌函数的行为称为闭包。
一般情况下外界是调用不到一个函数内部的变量,如果需要调用函数内部变量就需要闭包这个概念,此时变量就不会随着函数的销毁而销毁。
举例来说,闭包就像飞船的救生舱。如果没有救生舱,当飞船被摧毁时,宇航员就得随着飞船一起被摧毁。有了救生舱之后,宇航员这个变量就可以进入到救生舱当中,被return 出来。这样即使飞船被摧毁。宇航员这个变量还是可以出来被外界接收。
代码举例
def print_msg(msg):
a=1
def printer():
c=a+1
return printer # 变量a这个宇航员进入到救生舱之后必须把救生舱return 出去外界才能接收到
another = print_msg("Hello")
another()
网友评论