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

Effective Python:(18)作用域问题


Effective Python第21条说的是如何在闭包里使用外围作用域的变量,这也是我们编程常遇到的问题。

说起来比较简单,就是如何在内层的方法中使用外层方法的变量,就是局部变量的作用域的问题熟悉C语言的知道,是不能直接用函数外的局部变量的,需要通过参数传递,或者直接做成全局变量。

但是Python有闭包的概念,可以让内层方法直接引用外层方法的变量,可以读取其值,但是给外层变量赋值,会出现情况,发现无法赋值成功,这是因为内层函数当做新定义一个变量处理了,与外层变量无关。

要解决赋值的问题,可以给内层方法里改变量声明成nonlocal,这样就是告诉Python我们要把值赋值给闭包外部的变量。当然这样写有时候会使程序难以理解,这样情况我们就可以封装一个辅助类来完成,用类的self指针直接当做引用类的成员变量。

http://www.dtcms.com/a/56867.html

相关文章:

  • 番外篇 - Docker的使用
  • VSCode 配置优化指南
  • 【从零开始学习计算机科学】硬件设计与FPGA原理
  • r1-reasoning-rag:一种新的 RAG 思路
  • RtlLookupAtomInAtomTable函数分析之RtlpAtomMapAtomToHandleEntry函数的作用是验证其正确性
  • 【ArcGIS】地理坐标系
  • 空间域与频域图像处理
  • 基于DeepSeek的智慧医药系统(源码+部署教程)
  • C语言单链表头插法
  • 嘉立创:电子产业革新背后的隐形巨擘
  • C语言——【全局变量和局部变量】
  • 【智能体】本地安装Conda和搭建OpenManus环境
  • 人机共创:AI与人类编剧如何携手打造电影新纪元
  • 蓝桥备赛(13)- 链表和 list(上)
  • 第五章:go 的数据类型 及go语言拼接字符串有哪些方式
  • 百度移动生态事业群聚焦UGC战略,贴吧迎新调整
  • Scala 中生成一个RDD的方法
  • OmniGraffle Pro for Mac思维导图
  • 【运维篇】KubeSphere-02(经验汇总)
  • MySQL数据实时同步至Elasticsearch的高效方案:Java实现+源码解析,一文搞定!
  • CATIA V5 二次开发实战:Python实现零件实体智能转产品装配
  • 自行车的主要品牌
  • 深入解析 configService.addListener 使用中的注意事项
  • 【SpringMVC】SpringMVC的启动过程与原理分析:从源码到实战
  • OSError: [Errno 24] Too many open files
  • JDK 从 1.1 到 JDK 21 的变更与新特性
  • VSTO(C#)Excel开发3:Range对象 处理列宽和行高
  • three.js 在 webGL 添加纹理
  • 学习笔记:Python网络编程初探之基本概念(一)
  • leetcode77.组合