目录
1.概述
装饰器是用于管理和增强函数和类行为的代码。它提供一种在函数或类定义中插入自动运行代码的机制
优势:更明确的语法、更高的代码可维护性、更好的一致性
2.函数基础
在掌握装饰器之前先复习一下函数基础
- 将函数赋给变量
将函数hello赋值给了greeting变量。调用greeting函数也就是在调用hello函数
- 将函数作为参数传递
将函数作为参数传递给其他函数。
- 函数嵌套
greeting函数里嵌套hello函数,并返回hello函数,带()的返回会直接调用hello函数(一般不这么用),不带括号的返回需要执行时会返回函数,想要执行内部的函数需要再增加一个括号。
-
跨域访问
内侧函数会使用自己作用域里定义的变量
若加上nonlocal标识会使用外侧的变量 (其他标识还有global 详见python基础学习(五)函数章节)
3.装饰器
装饰器有两种方式添加
- 函数定义装饰器
- 类定义装饰器
函数定义装饰器
首先定义一个参数为函数的函数,并在其内部定义一个函数,调用参数函数。对参数函数的返回值进行装饰
其次,将我们定义的装饰器以@装饰器名 修饰在函数上
执行结果
装饰器的原理:将调用装饰器的函数作为参数传递给装饰器函数,在执行
类定义的装饰器:
定义__init__()函数初始化类
定义__call__()函数作为装饰器
执行结果:
函数定义的装饰器可以用在类中的方法上
类定义的装饰器用在类定义的方法上会产生问题,这是因为类里面的self会和装饰器的self冲突,想要解决这个冲突需要别的方面的知识,所有我们在使用时最好还是使用用函数定义的装饰器
装饰器的调用顺序——就近原则
打印结果
功能类似的装饰器我们可以在装饰器外部再嵌套一个接受参数的函数使装饰器更加灵活,注意它的返回结果。
使用再嵌套的装饰器
打印结果:
打印结果: