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的作用就是往上找一级。

浙公网安备 33010602011771号