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

相关推荐
2601_962078193 小时前
Python中calendar.weekday用法
python·编程技巧·calendar·日期处理·weekday
sunshine22 girl3 小时前
Java学习二 基本语法2, 算术运算符
java·学习
2601_962218614 小时前
万象生鲜系统业财一体化底层打通技术自动生成经营账单
大数据·数据库·人工智能·python·算法
2601_966949654 小时前
为什么量化策略需要大量历史股票数据?从回测可信度理解数据规模
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
niucloud-admin4 小时前
JAVA V6 多商户商城 开发文档——插件目录结构
java·开发语言
2601_962885724 小时前
如何用 Python 扫描 A 股跳空缺口并统计缺口回补概率?
java·前端·python
滕州市燕猫虎计算机科技工作室个体工商户4 小时前
Java锁
java·开发语言
李高钢4 小时前
Python FastAPI 框架入门:从零搭建你的第一个高性能 API 服务
数据库·python·fastapi
多加点辣也没关系4 小时前
JavaScript|第31章:表单与控件
开发语言·javascript·ecmascript
菜鸟~noob2335 小时前
【电子战】 第09篇:阵列信号处理——波束形成、MVDR、MUSIC【含matlab代码】
开发语言·matlab·信号处理