【厚积薄发系列】Python项目总结2—Python的闭包

本文介绍了闭包这一函数式编程的重要语法结构。闭包可组织代码、提高复用性,不同语言实现方式不同。文中给出Python闭包定义、必要条件及示例,还提及闭包无法直接修改外部函数局部变量的解决办法,最后阐述了闭包的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

闭包是函数式编程的一个重要的语法结构,函数式编程是一种编程范式。

(而面向过程编程和面向对象编程也都是编程范式)。在面向过程编程中,我们见到过函数(function);在面向对象编程中,我们见过对象(object)。

函数和对象的根本目的是以某种逻辑方式组织代码,并提高代码的可重复使用性(reusability)。闭包也是一种组织代码的结构,它同样提高了代码的可重复使用性。 

不同编程语言实现闭包的方式是不同的,python中闭包从表现形式上看,如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)。

再稍微讲究一点的解释是,闭包=函数块+定义函数时的环境,inner就是函数块,x就是环境,当然这个环境可以有很多,不止一个简单的x。 

首先给出闭包函数的必要条件:

  • 闭包函数必须返回一个函数对象
  • 闭包函数返回的那个函数必须引用外部变量(一般不能是全局变量),而返回的那个函数内部不一定要return

举个例子:

 

def outer(x):

def inner(y):

return x + y

return inner

闭包无法直接修改外部函数的局部变量

解决的方法: 

  1.在python3之前没有直接的解决方法,只能间接地通过容器类型来解决,因为容器类型不是存放在栈空间的,inner函数可以访问到。

2.python3通过nonlocal关键字来解决,该语句显式的指定x不是闭包的局部变量。

闭包的作用

用途1:当闭包执行完后,仍然能够保持住当前的运行环境。

用途2:闭包可以根据外部作用域的局部变量来得到不同的结果

以上两种使用场景,用面向对象也是可以很简单的实现的,但是在用Python进行函数式编程时,闭包对数据的持久化以及按配置产生不同的功能,是很有帮助的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值