名称空间:存放名字与值绑定关系的地方(x=1, 名称空间存放x和1的内存空间)
内置名称空间:python解释器启动就有,python解释器内置的名字,max,len,prient
全局名称空间:执行python文件时生效,文件级别定义的名字
局部名称空间:函数调用时生效,调用结束失效,函数内部定义的名字
加载顺序:内置 -- > 全局 --> 局部
访问名字的顺序:局部 -- > 全局 --> 内置
def f1():
x=1
def f2():
x=2
def f3():
x=3
print(x)
f3()
f2()
f1()
输出结果:3
def f1():
x=1
def f2():
x=2
def f3():
print(x)
f3()
f2()
f1()
输出结果:2
def f1():
x=1
def f2():
def f3():
print(x)
f3()
f2()
f1()
输出结果:1
x='gobal'
def f1():
def f2():
def f3():
print(x)
f3()
f2()
f1()
输出结果:gobal
全局作用域(全局范围):内置名称空间与全局名称空间的名字,全局存活,全局有效globals()
局部作用域(局部范围):局部名称空间的名字,临时存活,局部有效locals()
x=100
def f1():
x=1
print(x)
f1()
print(x)
输出结果:1
100
打破函数层级限制来调用函数
def outter():
def inner():
print('inner')
return inner
f = outter()
f()
输出结果:inner
函数的作用域关系是在函数定义阶段就已经固定了,与调用位置无关
x=1
def outter():
def inner():
print('inner',x)
return inner
f = outter()
# f()
x=111111111111111111111111111111111111
def bar():
x=3
f()
bar()