python基础语法学习: 闭包

文章目录

闭包

在函数嵌套的前提下, 如果一个内部函数引用了所在外层函数作用域中的变量,并且外层函数将该内部函数作为返回值返回,那么这个内部函数就叫做闭包函数,简称闭包。

简单闭包

python 复制代码
def outer(loge):
    def inner(mag):
        print(f"{loge} > {mag} > {loge}")
    return inner

fn1 = outer("hello")
fn1("python") # hello > python > hello
fn1("java") # hello > java > hello

也可以在内部函数中修改外部函数的值, 需要用到 nonlocal 关键字修饰外部函数的变量, 才可以在内部函数中修改它

nonlocal 关键字

python 复制代码
def outer(num1):
    def inner(num2):
        nonlocal num1
        num1 += num2
        print(num1)
    return inner

fn = outer(5)
fn(3) # 8
fn(4) # 12

每次调用外部函数, 结束后值并没有归零, 而是持续不断的保存

在上面这段代码中, 对于 outer 函数来说, num1 属于内部变量 ,在外部是无法修改 num1的值的

闭包的注意事项

优点:

  • 无需定义全局变量即可实现通过函数, 持续的访问, 修改某个值
  • 闭包使用的变量所用于函数内部, 难以被错误的调用修改

缺点:

  • 由于内部函数持续引用外部函数的值, 所以会导致这一部分内存空间不被释放, 一直占用内存

注意 :想要在内部函数中修改外部函数的值, 需要用 nonlocal关键字修饰

相关推荐
B2_Proxy1 小时前
Scrapy 代理 IP 调度进阶:基于 Redis 与中间件的高可用架构实战
python·scrapy·1024程序员节
在世修行2 小时前
智学文枢:AI 客户端封装
python·http·ai·1024程序员节·pyside
CRMEB系统商城2 小时前
家电零售的供应商协同与物流提效
java·开发语言·人工智能·小程序·1024程序员节
破芽2 小时前
learn-claude-code-s08-s09-学习笔记
笔记·学习
王大师王文峰2 小时前
Java+AI 面试题(二):业务场景设计 10 例【客服机器人、合同审查、Text2SQL、告警降噪、成本优化】场景题答法与追问链路
java·开发语言·人工智能
言乐62 小时前
Python实现三轴联动根据数据自动打磨镜片模型
开发语言·python
星恒随风2 小时前
Linux网络编程基础(二):彻底理解局域网通信、MAC与IP地址、数据封装、端口号、网络字节序及Socket接口
linux·网络·笔记·学习·tcp/ip·1024程序员节
万化冥合2 小时前
如何批量把 PPT 转成视频?
python·1024程序员节
CHHH_HHH3 小时前
【Linux网络篇】初识网络与Socket编程基础
linux·服务器·c语言·开发语言·网络·后端·1024程序员节
xiangjiaodalishi3 小时前
武汉玖叁鹿科技:我们把 GEO 服务做成了可以审计的交付工程
python·1024程序员节