【python】命名空间、作用域和函数嵌套
1、命名空间: 当程序执行时将变量与值得对应关系存放在一个空间中
临时命名空间:这个空间随着函数执行结束而消失
命名空间分类:
1. 内置命名空间: 在python解释器内部运行时的变量函数,如内置函数
2. 全局命名空间: 我们在py文件中直接声明出来的变量,函数
3. 局部命名空间: 在函数内部声明的变量和函数.
2、作用域:
1.全局作用域:内置+全局
2.局部作用域:局部(临时)命名空间
#只有模块,函数,类,lambda 会引入新作用域
globals() 查看全局作用域中的所有名字和值
locals() 查看当前作用域中的所有名字和值
3、函数的嵌套:
def func1():-----------1
print("赵")-----------3
def func2():----4
print("钱")-------7
def func3():------8
print("孙")------10
print("李")-------9
func3()
print("周")------------5
func2()-----------6
func1() ---------2
#只有调用的时候才有输出,函数声明时整体函数体先不用看,不执行
#执行结果: 赵 周 钱 李 孙
4、关键字gobal 和nonlocal
gobal :在函数内部引入全局变量或修改,还可以给局部变量升华成全局变量
nonlocal: 在函数内部,内层函数引入外层函数的局部变量,不可引入全局变量会报错
如:a = 5
def func1():
#gobal a----------引入全局变量
a += 1
print(a)
func1()------------会报错,因a是全局变量,应用gobal引入
print(a)---------这时a已发生了改变
如:def wrapper():
a = 1
def inner():
#nonlocal a------引入局部变量
a += 1
print(a)
inner()
wrapper()