Python 中嵌套函数与作用域的深度解析
1. 嵌套函数的作用域查找
在 Python 里,即便包含函数已经执行完毕并返回了值,在其作用域内的查找仍会进行。例如以下代码:
def f1():
X = 88
def f2():
print(X) # 记住包含函数作用域中的 X
return f2 # 返回函数 f2,但不调用它
action = f1() # 创建并返回函数
action() # 现在调用它 —— 输出 88
这里调用 action 实际上是在运行 f1 执行时命名为 f2 的函数。此方案可行,是因为在 Python 中函数和其他对象一样,能作为其他函数的返回值传递。关键在于,函数 f2 会记住包含它的函数 f1 中变量 X 的值,即便 f1 不再活跃。
2. 工厂函数:闭包
这种行为有时被称为闭包或工厂函数。闭包描述了函数式编程技术,而工厂函数是一种设计模式。不管如何称呼,该函数对象会记住周围作用域的值,无论这些作用域是否还存在于内存中。结果是会关联一些内存区域(如存储状态信息),这些区域对于每个创建的嵌套函数副本是局部的,并且常作为类的简单替代方案。
3. 简单的工厂函数
工厂函数(也称为闭包)有时会被程序使用,这些程序需要根据运行时变化的条
超级会员免费看
订阅专栏 解锁全文

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



