美文网首页
命名空间、作用域及生命周期

命名空间、作用域及生命周期

作者: w_wm_m | 来源:发表于2018-11-18 12:51 被阅读0次
命名空间.png

作用域

Tips:作用域是针对变量而言的,指申明的变量在程序里的可应用范围。或者称为变量的可见性。

  • 内建作用域:
  • 全局作用域:
  • 嵌套作用域:
  • 局部作用域:
  • 代码块不会产生作用域

命名空间

Tips:命名空间是一个字典的实现,键为变量名,值是变量对应的值。各个命名空间是独立没有关系的,一个命名空间中不能有重名,但是不同的命名空间可以重名而没有任何影响。

  • 内置命名空间:Python自带的内建命名空间,任何模块均可以访问,放着内置的函数和异常。
  • 全局命名空间:每个模块加载执行时创建的,记录了模块中定义的变量,包括模块中定义的函数、类、其他导入的模块、模块级的变量与常量。
  • 局部命名空间:每个函数所拥有的命名空间,记录了函数中定义的所有变量,包括函数的入参、内部定义的局部变量。

生命周期

  • 内建命名空间:在Python解释器启动时创建,一直保留到Python解释器退出。
  • 全局命名空间:在模块被加载时创建,通常一直保留到Python解释器退出。
  • 局部命名空间:在函数调用时才被创建,但返回函数结果或抛出异常时被删除。
  • Python解释器加载阶段会创建出内建命名空间,模块的全局命名空间,局部命名空间是在运行阶段函数被调用时动态创建出来的,函数调用结束动态销毁。
  • 各命名空间的创建顺序:Python解释器启动->创建内建命名空间->加载模块->创建全局命名空间->函数调用->创建局部命名空间。
  • 各命名空间的销毁顺序:函数调用结束->销毁函数对应的局部命名空间->Python虚拟机(解释器)退出->销毁全局命名空间->销毁内建命名空间。

两个关键字和两个函数

global

(1)


static_code.png
static_result.png

(2)


static_code.png
static_result.png
  • 对于第一个程序来说,函数外的x是全局命名空间的,并绑定的值为2,调用函数创建局部命名空间,函数里的x是局部命名空间的,绑定值为4,互不影响。
  • 对于第二个程序来说,同理,函数外的x是全局命名空间的,绑定值为2,调用函数创建局部命名空间,显然,函数里的x定义为局部命名空间的变量,x+=2分成两步执行,先执行x+2,再将结果赋值给x。但在执行x+2时,局部命名空间的x并没绑定值,所以报错。


    global.png
    global_result.png
  • 关键字global的作用就是,将局部命名空间的变量申明为全局变量。但是这样做并不安全,可以采用参数和返回值的方法修改全局变量。
nonlocal
local.png
local_result.png
  • 与上面同理,inner中的x并没绑定值,所以报错。


    nonlocal.png
    nonlocal_result.png
  • nonlocal声明的变量表示在离它最近一层的局部命名空间里。
globals()和locals()
  • globals():用于查看全局命名空间的变量。
  • locals():用于查看当前局部命名空间的变量。
  • 需要注意的是,当在全局命名空间使用locals()时,查看的是全局命名空间的变量。

相关文章

  • 命名空间、作用域及生命周期

    作用域 Tips:作用域是针对变量而言的,指申明的变量在程序里的可应用范围。或者称为变量的可见性。 内建作用域: ...

  • Python 中命名空间与作用域介绍

    导语:对命名空间和作用域认识很模糊?为了让大家有清晰的认识,本文详细介绍了命名空间类型及作用域,希望能让你对Pyt...

  • 作用域

    标识符的作用域有函数原型作用域、局部作用域(块作用域)、类作用域和 命名空间(namespace) 作用域 函数原...

  • C++命名空间相关概念

    变量作用域分为三类: 声明域 2. 潜在作用域 3. 作用域 声明域> 潜在作用域 > 作用域 命名空间是一种描述...

  • python——作用域和给对象及类添加属性和方法

    作用域 命名空间 变量或函数生效的范围 globals、locals LEGB规则locals(当前命名空间) ...

  • Python 学习笔记 - 第七天

    1.作用域和命名空间 示例: 如何引用不同作用域和命名空间 输出: 2.初识类 2.1.类定义语法 类定义最简单的...

  • 【第10天】python全栈从入门到放弃

    1.动态参数 *位置参数 **关键字参数 2.命名空间和作用域 2.1 命名空间 内置命名空间: python解释...

  • chapter18_命名空间

    命令空间 每个命名空间都是一个作用域位于该命名空间之外的代码必须明确指出所用的名字属于哪个命名空间 命名空间可以是...

  • 变量作用域

    0. 命名空间 变量作用域1. 变量作用范围:可操作范围2. Python 是静态作用域,变量的作用域源于它在代码...

  • 2017-3-22 less

    Extend伪类 样式的继承使用 LESS: CSS: 命名空间和作用域 指定命名空间LESS: CSS: 私有作...

网友评论

      本文标题:命名空间、作用域及生命周期

      本文链接:https://www.haomeiwen.com/subject/lerifqtx.html