Python 函数命名空间笔记
【摘要】 函数级命名空间相关知识。
命名空间和作用域:
命名空间有三种:
内置命名空间 --python解释器
就是python解释器一启动就可以使用的名字存储在命名空间中
内置的名字在启动解释器的时候被加载进内存里面
全局命名空间 --我们写在文件中的代码但不是写在函数中的代码
时在程序从上到下被执行的过程中依次加载到内存中的
放置了我们设置的所有变量和函数名
局部命名空间 --函数
就是函数内部定义的名字
当调用函数的时候 才会产生这个命名空间,随着函数执行的结束,这个命名空间就又消失了。
在局部:可以使用全局、内置命名空间中的名字
在全局:可以使用内置命名空间中的名字,但不能使用局部命名空间中的名字
在内置:不能使用局部和全局命名空间中的名字
在正常情况下,直接使用内置命名空间中的名字
当我们在全局定义了和内置命名空间中同名的名字时,会使用全局命名空间中的名字
当我自己有的时候,我就不找我的上级要了
如果自己没有,就找上一级要,上一级没有再找上一级,如果内置的命名空间都没有就报错
多个函数应该拥有多个独立的局部命名空间,不相互共享
作用域两种:
全局作用域:作用在全局,内置和全局命名空间中的名字都属于全局作用域 --globals()
局部作用域:作用在局部,函数(局部命名空间中的名字属于局部作用域) --locals()
对于不可变数据类型,在局部可以查看全局作用域中的变量
但是不能直接修改
如果想要修改,需要在程序的一开始添加global声明
如果在一个局部(函数)内声明一个global变量,那么这个变量在局部的所有操作将对全局的变量有效
nonlocal 只能用于局部变量 找上层中离当前函数最近一层的局部变量
声明了nonlocal的内部函数的变量修改会影响到 离当前函数最近一层的局部变量
对全局无效
对局部 也只是对 最近的 一层 有影响
命名空间 和 作用域
三种:内置 全局 局部
作用域:全局 局部 globals() locals()
global 在局部声明一个全局变量
nonlocal 在局部声明最近的上一层局部中的变量
作用域链 : 小范围用变量的时候,先从自己的名字空间找,
找不到就一层一层向外层找,知道找到为止。
找不到就报错。
函数的嵌套调用和嵌套定义
定义在函数内部的函数不能被外界直接调用
内部函数可以使用外部的变量
函数名的本质
就是一串内存地址
可以赋值、可以作为容器类型的元素、函数的参数和返回值 —— 第一类对象
闭包 : 内部函数使用外部函数的变量
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)