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