day 12
闭包函数
-
通过函数将函数包裹起来
def f1(): # f1就叫做闭包函数 def fuck(): print('sb') return fuck
-
将函数调用的过程封装成一个函数
def f1(url): def fuck(): print(url) return fuck baidu=f1('www.baidu.com') baidu()
-
通过将内层函数名作为外层函数的返回值,将内部函数进行定义,将函数的参数放到外层函数的型参位置,将外层函数的调用赋值给一个变量名,因外层函数的返回值为内层函数,故改变量等于一个传过参数的内层函数,使用时直接加括号就行了。
02.装饰器
-
装饰器;用函数装饰函数
-
使用装饰器的两个规定
- 不改变被修饰对象的源代码
- 不改变修饰对象的调用方式
-
怎么用装饰器
def sb(): print('123') def f1(url): def fuck(): print(233) url() print(332) return fuck sb=f1(sb) sb()
通过一个闭包函数实现对被修饰函数进行修改
-
完善装饰器
如果被修饰函数又返回值的话 chuy def sb(): return 123 def f1(url): def fuck(): print(233) res=url() print(332) return res return fuck sb=f1(sb) sb()
-
可以传参的装饰器
def sb(x,y): if x>y: print(123) return x else: print(321) return y def f1(res): def f2(*args,**kwargs): print('************') res(*args,**kwargs) print('************') return res return f2 sb=f1(sb) sb(20,10)
-
装饰器语法糖;通过在被装饰函数上面加上@装饰函数名来自动进行赋值操作
def f1(res): def f2(*args,**kwargs): print('************') res(*args,**kwargs) print('************') return res return f2 @f1 def sb(x,y): if x>y: print(123) return x else: print(321) return y sb(20,10)
-
对装饰器传参,就是在原有的装饰器基础上再包一层装饰函数
def f1(z): def f2(res): if z>10: a='大于10' else: a='小于10' def f3(*args,**kwargs): print(a) ss=res(*args,**kwargs) return ss return f3 return f2 @f1(12) def sb(x,y): if x>y: return x else: return y print(sb(99,88))