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

python 命名空间与作用域 可变与不可变对象 闭包

python 命名空间与作用域 可变与不可变对象 闭包

img
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 作用域规则顺序为: L->E->G->B 如果变量在局部内找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再找不到就去内置中找。

  • 若要在函数内使用global variable,则要么使用global声明,要么通过函数参数传递。

  • Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的。

  • 相对于nonlocal,global 关键字可以用在任何地方,包括最上层函数中和嵌套函数中,即使之前未定义该变量,global 修饰后也可以直接使用,而 nonlocal 关键字只能用于嵌套函数中,并且外层函数中定义了相应的局部变量,否则会发生错误。函数内global声明未定义的变量x,只要函数中对x符值了,则x就成为了一个全局变量,可以在后续程序中使用。(nonlocal无此特性,见下图:不能通过nonlocal声明一个未定义的量,即使在nonlocal空间/下方标黄的部分/声明一个全局,也不能通过nonlocal关联这个变量a)

在这里插入图片描述
在这里插入图片描述


对于可变对象类型,地址不固定,而是创建一个可变对象时,找到一个地址,作为这个对象实例。所以相同值的两个对象也是不同地址的两个对象,也因此,对对象如列表进行操作,不会影响这个列表的地址,只会对地址扩充。而不可变数据类型:变量所指向的内存地址处的值是不可以被改变。 因此对于两个相同值的对象,他们指针都指向同一个地址。


闭包:在一些语言中,在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包。闭包可以用来在一个函数与一组“私有”变量之间创建关联关系。在给定函数被多次调用的过程中,这些私有变量能够保持其持久性。

闭包作用就是:

  • 作用1:闭包是将外层函数内的局部变量和外层函数的外部连接起来的一座桥梁。(并且能保证全局命名空间不被污染)
  • 作用2:将外层函数的变量持久地保存在内存中。(这一步是因为调用闭包函数的父函数时,会返回闭包函数,如果这个返回被赋值到一个全局变量,则由于闭包函数的存在依赖于父函数中的nonlocal变量,导致父函数不会在调用后被垃圾回收机制(garbage collection)回收)

ref:

python 命名空间和作用域详解 - 知乎

闭包,看这一篇就够了——带你看透闭包的本质,百发百中-CSDN博客

【Python面试】 说说Python可变与不可变数据类型?-腾讯云开发者社区-腾讯云

Python闭包(Closure)详解 - 知乎

闭包,看这一篇就够了——带你看透闭包的本质,百发百中-CSDN博客

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

相关文章:

  • Haskell语言的NoSQL
  • 国产MCU替代STM32全解析:主流方案对比与实战指南
  • 11-leveldb compact原理和性能优化
  • 洛谷题单2-P5715 【深基3.例8】三位数排序-python-流程图重构
  • C 语言内存管理:从基础到实践
  • 《用代码实现字符数组的动态填充与显示》
  • 每日一题(小白)模拟娱乐篇13
  • Java基础-设计模式详解
  • 理解“功能内聚”
  • 如何在CSS中创建从左上角到右下角的渐变边框
  • SpringBoot + Netty + Vue + WebSocket实现在线聊天
  • @progress/kendo-react-dropdowns <ComboBox>组件报错,解决
  • 前端加密方式 AES对称加密 RSA非对称加密 以及 MD5哈希算法详解
  • 记录 vue-router访问 / 路径直接重定向到有权限的第一个菜单
  • 企业应用集成全析:架构、实践与展望
  • Mysql 中 MyISAM vs InnoDB
  • windows技术基础知识
  • 14.mybatis源码解析
  • 使用MCP服务器实现AI任务完成通知:让Cursor更智能
  • Floyd 算法 Java
  • Go/Rust 疯狂蚕食 Java 市场?老牌语言的 AI 化自救之路
  • 自编码器(AutoEncoder)概念解析与用法实例:压缩数字图像
  • 使用人工智能大模型DeepSeek,如何免费辅助教学?
  • 如何实现单例模式?
  • Java常用工具算法-4--签名算法(RSA,ECDSA,HMAC等)
  • 不同路径I
  • 洛谷题单3-P1720 月落乌啼算钱(斐波那契数列)-python-流程图重构
  • 迪杰斯特拉+二分+优先队列+拓扑+堆优化(奶牛航线Cowroute、架设电话线dd、路障Roadblocks、奶牛交通Traffic)
  • Leetcode 437 -- dfs | 前缀和
  • 大数据概念介绍