函数嵌套: #指在第二个函数里面调用第一个函数的结果
def func():
print('sss')
def func1(f):
f()
func1(func)
作用域链: #最内层的函数可以调用并且更改其他函数内的代码变量但是只限制于函数这个作用域内的变量 全局的变量不能被内部函数调用 否则会报错
#除非声明global 全局变量 全局变量一般不会经常使用 因为会影响整个局面
def func():
a = 1
def func1():
nonlocal a
a +=1
print(a)
func1()
func()
其中函数名字可以作为参数的实参,也可以赋值给其他变量,也可以作为容器名字也就是内存地址
globals 无论放在函数外边还是里边它都是查找全局的内存地址
locals 放在某个函数的里边查找的是这个函数内的所有变量 如果放在函数的最外边则与globals一样差的是全局内的所有变量
闭包:
def func():
a = 1
def func1():
print(a)
return func1
aa = func()
aa()
# 闭包必须嵌套函数 ,也必须是内部函数调用外部函数的变量
#闭包的好处是避免一个函数执行结束后会释放前面的变量或者代码 不用重复定义某个变量,节省内存