当前位置: 首页 > 后端技术 > Python

FluentPython阅读笔记---第7章函数装饰器与闭包

时间:2023-03-26 00:45:40 Python

最近在看《SmoothPython》这本书,想把我的阅读笔记分享给大家,希望能帮助到同样喜欢这本书的朋友但没时间看。(文中大部分文字和图片摘自《SmoothPython》一书和python官网)章节概述:介绍函数装饰器,以及闭包的概念和用法章节结构:装饰器变量作用域闭包具体内容:装饰器1.定义:函数装饰器用于标记函数,增强函数的行为。装饰器本身是一个可调用对象,其参数是另一个被装饰的函数。2.装饰方法:可以处理装饰后的函数,然后返回。或者用另一个函数或可调用对象替换它3.用法:@decoratedefdecorated_function_name():function_contentdefdecorat(func):decoration_content4。执行时间点:修饰函数定义后,模块导入时,普通函数在被调用时,即运行时执行。5.标准库内置了property、classmethod、staticmethod等装饰函数,functools模块中的装饰器5.1functools.lru_cache,实现了memo功能。LRU的意思是LeastRecentlUsed,意思是缓存不会无限增长。暂时不使用的缓存条目将被丢弃。5.2functools.singledispatch,把普通函数变成通用函数。6.堆叠装饰器:一个函数可以同时被多个装饰器装饰。7、参数化装饰器:Python在解析源码中的装饰器时,将装饰函数作为第一个参数传递给装饰器函数,装饰器可以通过创建装饰器工厂函数来接受其他参数。8.参数化注册装饰器:为了启用或禁用注册函数的注册功能,我们提供了一个可选的active参数,它通过true或false来决定一个注册装饰器是否启用。变量作用域1.一个函数读取两个变量的值,局部变量和全局变量2.局部变量,不需要声明3.全局变量,需要用global关键字声明闭包1.解决问题:闭包函数is当涉及嵌套函数时就会出现问题。2.定义:闭包是一个扩展范围的函数,它包括函数定义体中的引用,但不再定义定义体中定义的非全局命令。函数是否匿名并不重要,关键是他可以访问定义体之外定义的非全局变量。3.nonlocal:将变量标记为自由变量4.Form:defouter_func():local_varaibledefinner_func(parameter):inner_func_contentreturninner_func