Python函数闭包:
闭包指的是在函数内部定义了另外一个函数,并返回了这个内部函数作为函数对象,同时还保存了外层函数的状态信息。这个内部函数可以依赖外层函数的变量和参数,而且外层函数返回的是这个内部函数的引用。这种在函数内部定义函数并返回的方式称为闭包。
代码示例:
# 外部函数out传递的参数为x
def out(x):
# 内部函数inner传递的参数为y
def inner(y):
# 内部函数执行的时候引用了外部函数的参数返回的是具体的值
return x + y
# 外部函数返回内部函数的引用
return inner
if __name__ == "__main__":
a = out(2)
print("返回的内部函数名为:" + a.__name__)
b = a(3)
print("执行的结果为:" + b.__str__())
执行的结果为:
闭包的应用举例:flask框架中的路由
from flask import Flask
app = Flask(__name__)
# 实际执行了 @decorator
@app.route("/index", methods=['GET', 'POS'])
def index():
return ""
if __name__ == "__main__":
app.run()
@app.route("/index", methods=['GET', 'POS'])函数源码如下:
# rule为url明明规则 **options 为额外参数 返回值为内部函数引用
# t.Any表示 options 中的每个值可以是任何类型 t是类型别名
def route(self, rule: str, **options: t.Any) -> t.Callable[[T_route], T_route]:
# 内部函数 闭包
def decorator(f: T_route) -> T_route:
endpoint = options.pop("endpoint", None)
self.add_url_rule(rule, endpoint, f, **options)
return f
# 返回内部函数引用
return decorator