创新的广州做网站,免费做h5的平台,某网站开发项目进度表,戴尔网站建设的目标目录
局部函数与闭包函数的关联
变量捕获与状态保留
应用场景的交集与差异
闭包的本质
局部函数示例
闭包函数示例 局部函数和闭包函数之间存在着密切的联系#xff0c;同时也有一些本质的区别。
局部函数与闭包函数的关联
局部函数#xff08;Nested Function#…目录
局部函数与闭包函数的关联
变量捕获与状态保留
应用场景的交集与差异
闭包的本质
局部函数示例
闭包函数示例 局部函数和闭包函数之间存在着密切的联系同时也有一些本质的区别。
局部函数与闭包函数的关联
局部函数Nested Function
也称嵌套函数指的是在另一个函数内部定义的函数。它作为外部函数的一部分只能在外部函数的上下文中被调用和访问。
局部函数可以访问外部函数的局部变量和参数但通常情况下一旦外部函数执行完毕这些局部变量就会被销毁。
闭包函数Closure
实际上是一种特殊类型的局部函数它能够“记住”并访问其外部函数的局部变量和参数即使在外部函数已经返回之后。
闭包的关键在于它维持了对外部变量的引用从而能够在外部函数的生命周期结束后继续访问这些变量。
变量捕获与状态保留
局部函数通常不涉及对外部作用域变量的长期保留。它只是简单地借用外部变量的值进行计算或处理当外部函数执行完毕局部变量的生命周期也就结束了。
闭包函数通过创建一个引用链条使得外部函数的局部变量不会被垃圾回收机制回收即使外部函数已经执行完毕。这就允许闭包在后续的调用中继续访问和修改这些外部变量从而实现了状态的保留。 应用场景的交集与差异
交集两者都可以用来实现代码的模块化通过将相关的操作封装在一起来提高代码的可读性和可维护性。局部函数和闭包函数都能帮助程序员更好地组织代码结构减少全局变量的使用从而降低命名冲突的风险。
差异闭包特别适用于需要在不同时间点访问和修改共享状态的场景如计数器、缓存管理、装饰器等。而局部函数更多用于逻辑分段将大块的代码分解为更小、更易于管理的部分不一定涉及状态的持久化。
闭包的本质
闭包可以视为局部函数的一种扩展它利用了作用域链和变量生命周期的特性提供了一种在函数间传递状态和数据的方式。闭包的核心价值在于它打破了常规的变量作用域限制使得函数可以拥有“记忆”这在函数式编程和某些特定的设计模式中极为有用。
局部函数示例
这里我们定义一个函数该函数内部包含一个局部函数用于执行某个特定计算任务但不涉及状态的保留。
def outer_function(x):这是一个包含局部函数的外部函数。它定义了一个局部函数inner_function来执行计算。def inner_function(y):这是一个局部函数用于计算x和y的和。return x y # 访问了外部函数的变量x并与传入的y相加result inner_function(10) # 调用局部函数并传递参数return result# 调用外部函数
output outer_function(5)
print(output) # 输出结果为15在这个例子中inner_function是一个局部函数它只能在outer_function内部被访问和调用。它能够访问外部函数outer_function的参数x但是当outer_function执行完毕后inner_function就不再可用。
闭包函数示例
通过一个闭包的例子来展示如何在函数执行结束后仍然保留对外部变量的访问。
def counter_factory(start):这个工厂函数返回一个闭包函数。闭包函数能够记住start的值并在此基础上进行计数。count start # 这个变量被闭包记住def counter():闭包函数每次调用都返回递增的计数。nonlocal countcount 1return countreturn counter # 注意这里返回的是counter函数本身而不是调用它# 创建一个从1开始的计数器
counter1 counter_factory(1)print(counter1()) # 输出2
print(counter1()) # 输出3
print(counter1()) # 输出4# 创建另一个从10开始的计数器演示闭包独立保存状态的能力
counter2 counter_factory(10)print(counter2()) # 输出11
print(counter2()) # 输出12在这个例子中counter_factory函数返回了一个闭包函数counter。虽然counter函数在counter_factory执行完毕后仍然可用但它“记得”了创建时start的值并且每次调用都会基于这个初始值进行计数展示了闭包的“记忆”特性。每个由counter_factory创建的闭包实例都保留了自己的状态互不影响。 字典键值对找不到Python魔法方法__missing__来帮你-CSDN博客Humanize一个很有人情味的 Python 库_python humanize-CSDN博客Python自定义接口也能玩得这么花-CSDN博客