十三、名称空间与作用域





# 一、名称空间:namespaces 存放栈区的地方,是对栈区的划分
# 有了名称空间之后,就可以在栈区中存放相同的名字
分为三种:
内置名称空间:
存活周期:python解释器启动则产生,python解释器关闭则销毁。
存放的名字: 存放的是python解释器内置的名字


全局名称空间:
存活周期:运行顶级代码产生的名字,不是函数内定义,也不是内置的,剩下的都是全局的
存放的名字:python文件运行则产生,运行结束就销毁


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

加载顺序:
内置名称空间->全局名称空间->局部名称空间
销毁顺序:
局部名称空间->全局名称空间->内置名称空间




名字查找的优先级: 当前所在的位置向上一层一层查找
内置
全局
局部


例如:现在在局部,顺序就是局部->全局->内置
(1)站在函数内
input(input本身就是内置函数)


input = 333

def foo() :
input = 444
print(input)
foo()

(2)站在全局
input = 333

def foo() :
input = 444

foo()
print(input)


# 示例一:

# def func():
# print(x)
# x = 45
# func()

# 示例二: 名称空间的嵌套关系是以函数定义阶段为准,与调用位置无关

# x = 1
# def foo():
# print(x)
# def fun():
# x = 222
# foo()
# fun()

  

 

 

 

 

 

 

 

 

 

 

参考文章: https://www.zhihu.com/column/c_1189883314197168128

  

posted @ 2021-09-24 16:06  被遗忘的记忆  阅读(30)  评论(0编辑  收藏  举报