装饰器、闭包 语法糖
1. 函数名的使用, 第一类对象 1. 函数名可以像变量一样进行赋值操作 2. 函数可以作为容器(list, tuple, dict)的元素, 保存在容器内 3. 函数可以作为返回值返回 4. 函数可以作为参数进行传递 def func1(): print("我是func1") def func2(): print("我是func2") def func3(): print("我是func3") lst = [func1, func2, func3] for e in lst: e() # e表示的是lst中的每一个函数. 函数()执行函数. e() 执行每一个函数 def func1(): print("哈哈") def func2(): print("呵呵") def func3(): print("嘻嘻") return func3 return func2 fn = func1() # 哈哈 print("============>") fn() # def func(fn): fn() def func1(): print("你好") func(func1) 2. 闭包 目的: 让内存永远的记住一个变量 在内层函数中访问外层函数的局部变量. 叫闭包. 这个时候. 外层的这个局部变量将会常驻内存 from urllib.request import urlopen def func(): content = urlopen("http://www.xiaohua100.cn/index.html").read() def inner(): print("abc") return inner fn = func() print(fn.__closure__) # 检查闭包 3. 装饰器(初识) 开闭原则(开放封闭原则): 对添加功能开放. 对修改代码封闭. 语法糖: @装饰器名字 总结: def wrapper(fn): def inner(*args, **kwargs): '''目标函数之前你要做什么''' ret = fn(*args, **kwargs) '''目标函数之后你要做什么''' return ret return inner @wrapper def target(): pass def create_people(): print("捏泥人, 吹口气") # 装饰器的雏形 def water(fn): def inner(): print("浇水") fn() # 目标函数被执行 return inner create_people = water(create_people) create_people() def yue(name, name2, name3, name4, name5): print("约一约", name, name2, name3, name4, name5) def wen_wu(fn): def inner(*args, **kwargs): # 聚合 print("问问wusir") ret = fn(*args, **kwargs) # 打散 print("傻逼, 骗我") return ret return inner @wen_wu # dajia = wen_wu(dajia) def dajia(name): print("我要干你", name) return "伤啊" # dajia = wen_wu(dajia) ret = dajia("徐阳") print(ret) def zaoren(): print("捏人") def water(fn): def inner(): print("浇水") fn() return inner zaoren = water(zaoren) zaoren()
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步