Python 函数命名空间笔记

举报
Yuchuan 发表于 2020/02/10 18:44:27 2020/02/10
【摘要】 函数级命名空间相关知识。
命名空间和作用域:
    命名空间有三种:
        内置命名空间  --python解释器
            就是python解释器一启动就可以使用的名字存储在命名空间中
            内置的名字在启动解释器的时候被加载进内存里面
        全局命名空间  --我们写在文件中的代码但不是写在函数中的代码
            时在程序从上到下被执行的过程中依次加载到内存中的
            放置了我们设置的所有变量和函数名
        局部命名空间  --函数
            就是函数内部定义的名字
            当调用函数的时候 才会产生这个命名空间,随着函数执行的结束,这个命名空间就又消失了。
     在局部:可以使用全局、内置命名空间中的名字
     在全局:可以使用内置命名空间中的名字,但不能使用局部命名空间中的名字
     在内置:不能使用局部和全局命名空间中的名字
     
在正常情况下,直接使用内置命名空间中的名字
当我们在全局定义了和内置命名空间中同名的名字时,会使用全局命名空间中的名字
当我自己有的时候,我就不找我的上级要了
如果自己没有,就找上一级要,上一级没有再找上一级,如果内置的命名空间都没有就报错
多个函数应该拥有多个独立的局部命名空间,不相互共享

作用域两种:
    全局作用域:作用在全局,内置和全局命名空间中的名字都属于全局作用域  --globals()
    局部作用域:作用在局部,函数(局部命名空间中的名字属于局部作用域) --locals()
    
对于不可变数据类型,在局部可以查看全局作用域中的变量
但是不能直接修改
如果想要修改,需要在程序的一开始添加global声明
如果在一个局部(函数)内声明一个global变量,那么这个变量在局部的所有操作将对全局的变量有效

nonlocal 只能用于局部变量 找上层中离当前函数最近一层的局部变量
声明了nonlocal的内部函数的变量修改会影响到 离当前函数最近一层的局部变量
对全局无效
对局部 也只是对 最近的 一层 有影响

命名空间 和 作用域
三种:内置 全局 局部
作用域:全局 局部 globals() locals()
         global  在局部声明一个全局变量
         nonlocal 在局部声明最近的上一层局部中的变量
 作用域链 : 小范围用变量的时候,先从自己的名字空间找,
             找不到就一层一层向外层找,知道找到为止。
             找不到就报错。
 函数的嵌套调用和嵌套定义
     定义在函数内部的函数不能被外界直接调用
     内部函数可以使用外部的变量
 函数名的本质
     就是一串内存地址
     可以赋值、可以作为容器类型的元素、函数的参数和返回值 —— 第一类对象

 闭包 : 内部函数使用外部函数的变量


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。