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

相关推荐
大可不必了7 小时前
03 函数定义和调用
开发语言·python
I_belong_to_jesus7 小时前
C++关于分支预测的优化1
开发语言·c++·算法
承渊政道8 小时前
【Python编程—从入门到实践】(记分与闯关:用Python+Pygame,打造越战越精彩的太空大战!)
开发语言·python·pycharm·游戏程序·pygame
爱学习的程序媛8 小时前
Python常用框架梳理
开发语言·后端·python·ai·web·后端框架·python框架
imgsq8 小时前
GESP Python 一到四级:备考路线与真题特点
python·青少年编程
Rabitebla8 小时前
【Linux】进程控制(十二) 自定义 Shell(二):内建命令与进程工作目录管理
linux·c++·笔记·学习·bash
Gary移动存储固件9 小时前
eMMC5.1协议中文学习讲解(6.6.17~6.6.22.4.6)
学习·ufs·emmc·nand·存储固件
一个天蝎座 白勺 程序猿9 小时前
别让收藏夹替你学习:我搭AI知识体系的完整方法,脚本直接拿去用
人工智能·学习·ai·ai学习
eggwyw10 小时前
Anaconda安装卸载的详细流程指南
开发语言·python
2601_9679791210 小时前
纯手写:Python安装pip完整教程,搞了几小时,终于成功
python·教程·pip·安装·包管理