----介绍
# 名称空间(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()