名称空间

Posted shicongcong0910

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了名称空间相关的知识,希望对你有一定的参考价值。

名称空间:
  内置 全局 局部

  内置命名空间 存放python解释器为我们提供的名字list str tuple之类的
  全局命名空间 直接在py文件中,函数外部声明的变量都是属于命名空间
  局部命名空间 在函数中声明的变量

取值顺序:
1.局部命名空间
2.全局命名空间
3.内置命名空间

技术图片

 


加载顺序:
1.内置空间
2.全局空间
3.局部空间
作用域:就是作用的范围,按照生效范围来分为全局作用域和局部作用域
全局作用域:包含命名空间和全局命名空间 在整个文件的任何位置都可以使用(遵循从上到下逐步执行)
局部作用域:在函数内部可以使用
globals() 查看全局变量
locals() 查看局部变量
a = 10
def func():
    a = 40
    b = 20
    def abc():
        print("哈哈")
        print(a, b)     # 这里使用的是局部作用域
        print(globals())    # 打印全局作用域中的内容
        print(locals())     # 打印局部作用域中的内容
    abc()
func()
结果:

哈哈
40 20
{‘__name__‘: ‘__main__‘, ‘__doc__‘: None, ‘__package__‘: None, ‘__loader__‘: <_frozen_importlib_external.SourceFileLoader object at 0x00000000006B5A20>, ‘__spec__‘: None, ‘__annotations__‘: {}, ‘__builtins__‘: <module ‘builtins‘ (built-in)>, ‘__file__‘: ‘C:/Users/Administrator/PycharmProjects/untitled/函数复习.py‘, ‘__cached__‘: None, ‘a‘: 10, ‘func‘: <function func at 0x00000000003B1E18>}
{‘b‘: 20, ‘a‘: 40

  

 

修改全局变量:

a = 10
def func():
    def abc():
        global a #声明修改全局变量a
        a = 22  #对a进行修改
        print(a)
    abc()
func()
print(a)
结果:
22
22

global修改全局变量 但是只能在局部修改 在全局会报错

a = 10
def func():
    a = 22
    def abc():
        nonlocal a  #声明父类离得最近的非全局变量a
        a =66    #对a进行修改
        print(a)
    abc()
    print(a)
func()
print(a)
结果:
66
66
10

nolocal修改父类离得最近的非全局的变量

























以上是关于名称空间的主要内容,如果未能解决你的问题,请参考以下文章

python 14 名称空间与作用域

Python--名称空间

PHP命名空间的三种引用方式:非限定名称限定名称完全限定名称

PHP命名空间的三种引用方式:非限定名称限定名称完全限定名称

python基础之名称空间和作用域函数嵌套

名称空间与作用域