Python基础-day10-命名空间和作用域

命名空间和作用域

内置命名空间 -- python解释器

    python解释器一启动就会加载一些内置名字到内存中。

    print,input,len等

 

全局命名空间 -- 我们写的代码,但不是函数中的代码

    程序从上到下被执行的过程中依次加载进内存 

    放置了我们设置的函数名和变量名

 

局部命名空间 -- 函数

    函数中定义的名字

    调用函数时,才会产生这些名字,随着函数执行完毕,这个命名空间会消失

 

内置命名空间

    全局命名空间

        局部命名空间

 

func --> 函数的内存地址

func()--> 函数的调用

 

全局作用域:

    在全局中执行 globals(),查看全局作用域和内置作用域中的名字。

局部作用域:

    在局部中执行 locals(),可以查看局部作用域中的名字。

    在全局中执行 locals(),可以查看到跟 globals()一样的名字。


a = 1

def func():

    a += 1

    // 错误代码

 

a = 1

def func():

    global a

    a += 1

    // 正确代码

 

对于不可变数据类型,在局部可以查看全局作用域中的变量,但是不能直接修改。

如果想要修改,需要在程序的一开始添加global声明。

如果在全局声明了一个a变量,同时在一个局部函数中声明了global a,

那么我们在局部函数中操作a时,将会影响到全局中的a变量。

a = 1

def func():

    global a

    # 任何对 a的操作都会反映给函数外的 a变量

 

a = 1

b = 2

def func():

    x = 'aaa'

    y = 'bbb'

    print(locals())

func()

 

# global尽量少用,能不用就不用。

 

如果函数内部没有变量a,那么需要使用nonlocal a跳出本级范围,在上一级范围内找变量a。

nonlocal的作用就是往上找一级。

 

posted @ 2019-11-01 15:49  道霖  阅读(124)  评论(0)    收藏  举报