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

闭包和装饰器

#闭包的作用
#全局变量有被修改的风险,代码在命名空间上不够干净整洁
#第一种,不使用闭包的场景
account_amount=0
def atm(num,deposit=True):global account_amountif deposit:account_amount+=numprint(f"存款:+{num},账户余额{account_amount}")else:account_amount-=numprint(f"存款:-{num},账户余额{account_amount}")
atm(300) #存款:300,账户余额300
atm(300) #存款:300,账户余额600
atm(100,False) #存款:100,账户余额500
#从上面可以看到全局变量在被不断的修改,同时,代码也不够干净#使用闭包的写法见如下,这种就不会有全局变量了,这种就是闭包了
def account_create(initial_amount=0):def atm(num,deposit=True):nonlocal initial_amount #这条句子定义后,后续可以在修改变量if deposit:initial_amount+=numprint(f"存款+{num},账户余额{initial_amount}")else:initial_amount-=numprint(f"存款-{num},账户余额{initial_amount}")return atm
fn=account_create()
fn(100)  #存款+100,账户余额100
fn(200)  #存款+200,账户余额300#闭包的优点 无需要定义全局变量就可以通过函数,持续的访问修改某个值,闭包使用的变量在于函数内,难被错误的调用修改
#缺点,由于内部持续引用外包函数的值,所以会导致内存空间不足,一直占用内存
http://www.lryc.cn/news/185021.html

相关文章:

  • 注册器模式
  • 5SpringMVC处理Ajax请求携带的JSON格式(“key“:value)的请求参数
  • 学习笔记|ADC|NTC原理|测温程序|STC32G单片机视频开发教程(冲哥)|第十九集:ADC应用之NTC
  • Redisson 集成SpringBoot 详解
  • C# 下载模板文件 Excel
  • 如何做好sop流程图?sop流程图用什么软件做?
  • JAVA编程题-求矩阵螺旋值
  • Python--入门
  • STM32复习笔记(二):GPIO
  • POJ 3264 Balanced Lineup 线段树 / 平方分割
  • element-plus自动引入组件报错,例如collapse、loading
  • ChainForge:衡量Prompt性能和模型稳健性的GUI工具包
  • 队列--二叉树层序遍历
  • Ceph入门到精通-Linux内核网络参数优化小结
  • AWK语言第二版 2.6个人库 2.7小结
  • 8年经验之谈 —— Web ui自动化测试框架总结!
  • Kafka在企业级应用中的实践
  • 使用企业订货系统后的效果|软件定制开发|APP小程序搭建
  • STL关联式容器set,multiset,pair,map
  • MFC文本输出学习
  • Python 数据分析与挖掘(一)
  • 【问题证明】矩阵方程化为特征值方程求得的特征值为什么是全部特征值?不会丢解吗?
  • 虹科干货 | 不是吧,Redis Enterprise也能当向量数据库来用?
  • 汽车驾驶 - 四梁六柱是什么
  • CI522 13.56MHZ电动车NFC测试资料
  • 【微信小程序开发】一文学会使用CSS样式布局与美化
  • 漏刻有时物联网环境态势感知大数据(设备列表、动态折线图)
  • 【力扣】单调栈:901. 股票价格跨度
  • 4_使用预训练模型 微调训练CIFAR10
  • 机器学习笔记(一)