30.Python:名称空间与作用域


----介绍

# 名称空间(namespaces):存放名字的空间
# 有了名称空间之后,就可以在栈区中存放相同的名字
# 1.1内置名称空间
# 存放名字:存放python解释器内置的名字
# 存活周期:python解释器启动则产生,python解释器关闭则销毁

# 1.2全局名称空间
# 存放名字:运行顶级代码所产生的名字,或者说不是函数内定义、也不是内置的名字
# 存活周期:python文件执行则产生,python文件运行完毕后销毁

# 1.3局部名称空间
# 存放名字:在调用函数时,运行函数体代码过程中产生的函数内的名字
# 存活周期:调用函数时产生,函数调用完毕后销毁

# 1.4名称空间的加载顺序
# 内置名称空间>全局名称空间>局部名称空间

# 1.5名称空间的销毁顺序
# 局部名称空间>全局名称空间>内置名称空间

# 1.6名字的查找优先级:当前所在位置向上一层一层查找
# 局部名称空间->全局名称空间->内置名称空间


# 名称空间的嵌套关系是以函数定义阶段为准,与调用位置无关
x = 1


def func():
print(x)


def foo():
x = 222
func()


foo()


----全局作用域与局部作用域

# 全局作用域:内置名称空间、全局名称空间
# 1.全局存活
# 2.全局有效:被所有函数共享

# 局部作用域:
# 1.临时存活
# 2.局部有效


----
global与nonlocal

# global
x = 111


def func():
global x
x = 222


func()
print(x)

# nonlocal(了解)

def f1():
x = 11

def f2():
nonlocal x
x = 22
f2()
print('f1内的x:', x)


f1()
posted @ 2021-06-25 13:56  SEPIA  阅读(50)  评论(0)    收藏  举报