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关键字修饰

相关推荐
空心木偶☜4 分钟前
A2A2A(多智能体协作)
开发语言·python·ai·ai编程
Cc.Y6 分钟前
Java零基础入门:类与对象深度掌握 —— 从“零散变量“到“打包管理“
java·开发语言·python
其实防守也摸鱼6 分钟前
DeepSeek Harness 开源贡献手记:从 Issue 到 Merge 的完整旅程
android·数据库·学习·ai·oracle·自动化
\光辉岁月/8 分钟前
2.java变量
java·开发语言·变量
AINative软件工程17 分钟前
LLM Prompt Registry 工程实践:集中管理 Prompt,让模型调用不再散落在代码各处
后端·python·llm
一隅论数智19 分钟前
给AI找对“富矿“:本体协同的六大应用模式与落地战法
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
夏天的清晨23 分钟前
C++入门学习
开发语言·c++·学习
传奇开心果编程24 分钟前
【ArkUI进阶练中学】第18课:Agent亲和架构与应用智能化改造
学习·ui·华为·harmonyos
Patrick在香港24 分钟前
MCP 的 initialize 握手真的没了?67 行标准库实测 2026-07-28 规范
python·agent·claude·mcp·json-rpc
代码山河26 分钟前
Java的前世今生:从Oak语言到Java 23的发展史
java·学习·架构·教程·面向对象·项目