Python——作用域和命名空间

2019-03-13  本文已影响0人  shijiatongxue

高阶提示:对于高级Python程序员来说,了解这个主题是有用的。
首先我们先看一下,作用域和命名空间是什么?

1 命名空间(Namespace)

一个名字到对象的映射。

有点像字典的功能。命名空间举例来说有:内置的函数;模块里面的全局变量;函数里面的局部变量。一个对象的属性也是一个命名空间。命名空间的作用是为了防止名字(函数等)的冲突。
这里的属性指的任何在点之后的名字。如:z.real,则real是对象z的属性。

from math import random
a = 'love'

这种情况下,random和a在同一个命名空间。

命名空间的生存周期

内置的命名空间,在解释器启动之后被创建、从不被删除;
全局的命名空间在模块启动后创建,持续到解释器关闭;
局部的命名空间在函数被调用时启动,函数返回或出现错误时结束;递归调用也如此。

2 作用域(scope)

作用域是一个python程序的文本区域,其中可以直接访问命名空间。

在执行期间的任何时候,至少有三个可直接访问其命名空间的嵌套作用域:

通常情况下,本地名称指的是当前的函数(或类);出了函数,就是模块的全局命名空间;

3 例子

作用域和命名空间.png

可以看出,我们在主函数里面命名了一个spam,它属于non-local变量;
对于do_local函数里面的spam,它优先处理的是局部变量;
对于do_global函数里面的spam,它属于全局变量,无法对non-local变量进行修改。

感想:


参考文献:
Python-tutorial

上一篇 下一篇

猜你喜欢

热点阅读