当前位置: 首页 > article >正文

python---闭包

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

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

 简单的闭包:

def outer(logo):
    def inner(msg):
        print(f"<{logo}>{msg}<{logo}>")

    return inner


fn1 = outer("hi")  # fn1 是一个函数
fn1("大家好")

fn2 = outer("hello")
fn2("你好")

修改外部函数变量的值---使用nonlocal关键字修饰外部函数大的变量才可以在内部函数中修改他

def outer(num1):
    def inner(num2):
        nonlocal num1
        num1 += num2
        print(num1)

    return inner


fn1 = outer(10)
fn1(2)  # 12
fn1(4)  # 16

 案例:

def account_amount(initial_amount=0):
    def atm(num, deposit=True):
        nonlocal initial_amount
        if deposit:
            initial_amount += num
            print(f"{num}\{initial_amount}")
        else:
            initial_amount -= num
            print(f"{num}\{initial_amount}")

    return atm


fn1 = account_amount()
fn1(100)
fn1(200)
fn1(300, deposit=False)


http://www.kler.cn/a/105325.html

相关文章:

  • Android Studio 导出 jar
  • 【JavaEE初阶】 线程安全的集合类
  • elementUI 中 date-picker 的使用的坑(vue3)
  • Redis | 数据结构(02)SDS
  • 解决Windows出现找不到mfcm90u.dll无法打开软件程序的方法
  • 第四章 文件管理 六、文件的基本操作
  • 第十一届蓝桥杯模拟赛第一期
  • 用IntelliJ远程打断点调试
  • Mingw下载---运行vscodeC++文件
  • VNC图形化远程连接Ubuntu服务器
  • vue首页多模块布局(标题布局)
  • 在Java中使用FileReader.read()进行读取文件时,为什么乱码?两个方法解决
  • ROS学习记录2018.7.10
  • 使用java mail SMTPTransport发送邮箱,本地秒到,一上服务器就20-30s左右,生产环境直接发送失败。
  • Python基础学习004——for循环与字符串
  • 一、Docker Compose——什么是 Docker Compose
  • mongodb-gridfs下载文件报Sort exceeded memory limit of 104857600 bytes异常
  • MSQL系列(七) Mysql实战-SQL语句Join,exists,in的区别
  • 【顺序栈的表示和实现,顺序栈的初始化,是否为空,清空顺序栈,销毁顺序栈,】
  • Nginx的请求时间限制(如周一到周五可以访问)