1、命名空间的本质是一个字典:locals()函数返回当前域的命名空间,globals()函数获得全局命名空间
2、闭包是高阶函数的特例,返回值是一个函数。
调用一个方法的原理:方法开始执行时,将代码调入内存,执行完毕后从内存里销毁
def fn():
a = 10
def inner():
print("a=",a)
print(" I am inner()")
return inner
因此需要定义一个变量来接收返回的函数,r = fn();调用r();
闭包的条件:
1)、函数嵌套 2)、将内部函数作为返回值 3)、内部函数必须用到外部函数的变量(若不使用外部变量,则内部函数就会被移出内存,使用了局部变量则必须保存下来)
3、装饰器
作用:用来对其他函数进行扩展,使其他函数可以在执行前开始打印,执行后打印结束
def w1(func):
def inner():
print("...验证权限...")
func()
return inner
@w1
def f1():
print("服务1")
@w1
def f2():
print("服务2")
#对其他部门设置权限
#装饰器的使用,装饰一个函数,用来判断权限
f1()
f2()
@w1 修饰了函数 ,相当于 闭包里 f1 = inner ,在这里参数func 具体就是指f1
结果:
...验证权限...
服务1
...验证权限...
服务2