名称空间与作用域
![image]()
1.名称空间
![image]()
# 1.名称空间
# 1.1 什么是名称空间
存放变量名与变量值绑定关系的地方,可以理解为日常生活中的民政局
# 1.2 名称空间的分类
全局名称空间:在py文件开始运行时生成,结束时销毁
只要可以在自己的圈子中运行结束后还能跑出来的都是全局名称空间
name = 'jason' # name全局
def func(): # func全局
pass
if 1:
a = 123 # a全局
for i in range(10):
print(i) # i全局
while True:
a = 123 # a全局
局部名称空间:在函数体代码开始运行时生成,结束时销毁
函数体代码运行之后产生的都是局部名称空间
内置名称空间:在python解释器运行时生成,结束时销毁
python解释器定义好的
open()
len()
# 1.3 名字的查找顺序
如果是在局部里
局部>>>全局>>>内置
如果你在全局
全局 >> > 内置
只能按顺序找,不能倒回去再找
局部名称空间的嵌套
'''函数在定义阶段名字的查找顺序就已经固定死了(特例)'''
x = 111
def f1():
x = 222
def f2():
x = 333
def f3():
x = 444
def f4():
x = 555
print(x)
# x = 555 特例:当x在print下面就会报错,
f4()
f3()
f2()
# 通过调用f1 执行所有的函数
f1()
def fun(**kwargs):
print(kwargs)

fun(name = 'jason',age = 18)
2、作用域
![image]()
# 名称空间的作用域
# 作用域
名称空间所能够作用的范围
# 内置名称空间
程序任何阶段任何位置均可使用(全局有效)
# 全局名称空间
程序任何阶段任何位置均可使用(全局有效)。全局名称空间内的名字在整个文件执行期间全局存活(除非被删除,且在文件的任意位置都能被使用
# 局部名称空间
一般情况下只在各自的局部名称空间中有效。该范围内的名字临时存活,只在函数体开始执行时临时生成
函数调用结束后就释放,且只能在函数中使用
![image]()