有了名称空间之后,就可以在栈区中存放相同的名字,详细的名称空间:↓
? 存放的名字:内置名称空间存放的是python解释器自带的名字
? 例如:print input ....
? 生命周期:py解释器启动则产生,解释器关闭则销毁
? 存放的名字:只要不是内置的和函数内定义的名字,都是全局名称空间
? 生命周期:python文件执行则产生,python文件运行完毕后则销毁
? 存放的名字:在调用函数时运行函数体代码中产生的函数内的名字
? 生命周期 :在调用函数时产生,函数调用结束后销毁
? 内置名称空间>>全局名称空间>>局部名称空间
? 局部名称空间>>全局名称空间>>内置名称空间
? 内置名称空间
? 全局名称空间
? 局部名称空间
# 局部名称空间>>>全局名称空间>>内置名称空间
# input = 333 全局找到打印 333 ,全局注释掉则去内置找
# def func():
# input = 444 #先在局部找,局部注释掉没有之后去全局↑找
# print(input)
# func()
#全局名称空间>>内置名称空间
# .....
# def func():
# print(x)
# x = 111
# func()
# input = 333
# def func():
# print(input)
# func()
# input = 111
# def f1():
# # input = 222
# def f2():
# # input=333
# print(input)
# input = 222
# f2()
# f1()
# 名称空间的查找顺序是以定义阶段为准的
# 名称空间的查找顺序是以定义阶段为准的
# 名称空间的查找顺序是以定义阶段为准的
# 名称空间的查找顺序是以定义阶段为准的
# 名称空间的查找顺序是以定义阶段为准的
# 名称空间的查找顺序是以定义阶段为准的
# x = 111
# def func():
# print(x)
# x = 222
# func()
? 1、全局存活
? 2、全局有效
? 1、临时存活
? 2、局部有效:在函数内有效
# L:当前位置
# E:外层函数
# G:全局
# B:内置
# 基于当前所在位置向外一层一层查找 L--> E--> G--> B
# LEGB
# builtin
# global
#def f(x):
#enclosing
# def f1():
#enclosing
# def f2():
#local
# print(x)
# x= 111
# def func():
# global x # global申明x这个名字是全局的名字,不要再造新的名字
# x = 222
# func()
# print(x)
# 示范
# l = [111,222]
# def func():
# l.append(333) #追加值
# func()
# print(l)
# nonlocal(了解) 修改函数外层函数包含的名字对应的值(不可变类型)
# x = 0
# def f1():
# x=1
# def f2():
# nonlocal x
# x=2
# f2()
# print(x)
# f1()
# global
# x = 111
# def func():
# global x
# x = 222
# func()
# print(x)
原文:https://www.cnblogs.com/liupengfei1123/p/14592684.html