闭包
- 闭包:两个函数嵌套,外层函数返回内层函数的引用,外层函数必须要带参
def 外部函数(参数):
def 内部函数():
pass
return 内部函数
- 与函数之间的区别:
1.格式两个函数嵌套
2.闭包外部函数的参数可以在内存中保持
装饰器
- 装饰器是什么:闭包加@xxx
- 装饰器的作用:在不改变原先的函数值跟调用的方式,添加额外的功能
- 装饰器的代码:
def set_fun(func):
def call_fun(*args,**kwargs):
return func(*args,**kwargs)
return call_fun
@set_fun
def test():
pass
装饰器图解
两个装饰器装饰一个函数图解
类装饰
1.格式
class 类名(objec):
def __init__(): @初始化类的时候执行
pass
def __call__(): 装饰后的调用执行
pass
2.例子
class A(object):
def __init(self,fun)
self.fun = fun
def __call(self)
print("添加额外功能")
return self.fun()
@A
def test():
print("test")
test()
装饰器传参
1. 三个函数嵌套,第三层内部包含一个闭包,第三层返回闭包的引用
def set_args(参数):
def set_fun(func):
def call_fun(*args,**kwargs):
return func(*args,**kwargs)
return call_fun
return set_fun
@set_args("参数)
def test():
pass
2.例子
def print_args(args):
print(args)
def set_fun(fun):
print("第二层")
def call_fun(*args,**kwargs):
print("第一层")
return fun(*args,**kwargs)
return call_fun
return set_fun
@print_args("haha") ——语法糖执行流程: ① print_args("haha") 调用该函数 ② test = set_fun(test)
def test():
print("test")
test()