命名空间和作用域 global 和nonlocal

全局名称空间:存放的是py文件中变量与值的对应关系

局部名称空间(临时名称空间):存放的是函数体里面的变量与值的对应关系

内置名称空间:存放内置函数,关键字等,print(),int

 

作用域:

(1)全局作用域:内置名称空间,全局名称空间

(2)局部作用域:局部名称空间

 

加载顺序:加载到内存的顺序
内置名称空间 ---> 全局名称空间 ---> (当函数执行时)局部名称空间

取值顺序:(就近原则)

LEGB 原则  局部名称空间 ---> 全局名称空间 ---> 内置名称空间

 

globals()和locals()函数

 print(globals()) # 返回一个字典:包含全局作用域所有的内容
print(locals()) # 返回一个字典:当前作用域的所有内容

 

关键字:global nonlocal

global :
(1)可以局部作用域声明一个全局变量
(2)局部作用域不能对全局作用域的变量进行修改,只能引用,通过设置global可以修改。(限于字符串,数字)

  ps:对可变数据类型(list,dict,set)可以直接引用不用通过global。

nonlocal : 只在python3x中 存在。
(1)函数中的变量加nonlocal后也不能操控全局变量

(2)变量加nonloc只争对在局部作用域下对变量进行修改,并且引用的哪层,从那层及以下此变量全部发生改变。

def wrapper():
    name = 'rock'
    def inner():
        nonlocal name
        name += 'b'
        # print(name)
    print('1', name)
    inner()
    print('2', name)
wrapper()

 

posted @ 2019-01-02 17:59  平平无奇小辣鸡  阅读(92)  评论(0编辑  收藏  举报