流畅的Python读书笔记 --- 第七章 函数装饰器和闭包

近期在读“流畅的Python”这本书,想把自己的读书笔记分享给大家,希望能帮到也对这本书感兴趣但是没时间看的各位。(文章中大部分的话和图片摘录总结自“流畅的Python”一书,以及python官方网站)

章节概述:介绍函数装饰器,和闭包的概念与使用方法
章节结构:

  • 装饰器
  • 变量作用域
  • 闭包

具体内容:

  • 装饰器

1.定义:函数装饰器用于标记函数,增强函数的行为。装饰器本身是可调用的对象,它的参数是另一个被装饰的函数。
2.装饰方法:可能会处理被装饰的函数,然后把他返回。或者将其替换成另一个函数或者可调用对象
3.用法:

@decorate
def decorated_function_name():
    funtion_content

def decorat(func):
    decoration_content

4.执行时间点:被装饰函数定义后,模块导入时,而普通的函数是在调用时,也就是运行时执行。
5.标准库内置装饰函数,像是property,classmethod,staticmethod,还有functools模块中的装饰器
5.1functools.lru_cache,实现了备忘功能,LRU表示Least Recentl Used,缓存不会无限增长的意思,一段时间不用的缓存条目会被扔掉。
5.2functools.singledispatch,把普通函数变成泛函数。
6.叠放装饰器:一个函数可以被多个装饰器同时装饰。
7.参数化装饰器:解析源码中的装饰器时,Python把被装饰的函数作为第一个参数传给装饰器函数,通过创建装饰器工厂函数可以让装饰器接受别的参数。
8.参数化的注册装饰器:为了便于启动或者禁用register函数注册功能,我们提供可选的active参数,通过true或false决定一个注册装饰器的启用与否。

  • 变量作用域

1.一个函数读取两个变量的值,局部变量和全局变量
2.局部变量,不需要声明
3.全局变量,需要用global关键字声明

  • 闭包

1.解决问题:闭包函数是涉及嵌套函数时产生的问题。
2.定义:闭包是延伸了作用域的函数,其中包含函数定义体中引用,但是不再定义体中定义的非全局便令,函数是不是匿名的没有关系,关键是他能访问定义体之外定义的非全局变量。
3.nonlocal:把变量标记为自由变量
4.形式:

def outer_func():
    local_varaible
    def inner_func(parameter):
        inner_func_content
    return inner_func

你可能感兴趣的:(python,读书笔记)