Python自学成才之路 使用函数作为装饰器
时间:2022-07-23
本文章向大家介绍Python自学成才之路 使用函数作为装饰器,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
前面都是用类作为装饰器(传送门),主要是用类作为装饰器理解起来更容易。其实函数也可以用来做装饰器,因为函数本身就是可调用的,而且函数作为装饰器用得更多。同样函数作为装饰器可分为装饰器带有参数和不带参数。
第一种:不带参数的装饰器
不带参数的装饰器需要以函数作为参数,最后返回一个函数,如下所示:
def my_decorate(func):
def wrapper(*args, **kwargs):
func(*args, **kwargs)
return wrapper
@my_decorate
def my_function(arg1):
print('this is nmy_function : %s' %arg1)
my_function('hello')
输出:
this is nmy_function : hello
这个过程等价于 1.将my_function作为参数传入my_decorate函数中,返回wrapper函数 2.给wrapper传入参数并执行
wrapper = my_decorate(my_function)
wrapper('hello')
第二种:装饰器带参数
先看案例:
def my_decorate(params):
print(params)
def out_wrapper(func):
def inner_wrapper(*args, **kwargs):
func(*args, **kwargs)
return inner_wrapper
return out_wrapper
@my_decorate('hello my_decorate')
def my_function(arg1):
print('this is nmy_function : %s' %arg1)
my_function('hello')
输出:
hello my_decorate
this is nmy_function : hello
其实很好理解,就是使用一个函数包住装饰器函数,这里可以理解为使用my_decorate包住装饰器函数out_wrapper,所以my_decorate(‘hello my_decorate’) 返回的是out_wrapper,最后out_wrapper作为my_function的装饰器。
这个过程等价于 1.传递参数给my_decorate函数并,返回out_wrapper函数 2.传递my_function给out_wrapper函数并执行,返回inner_wrapper函数 3.传递参数给inner_wrapper函数并执行
out_wrapper = my_decorate('hello my_decorate')
inner_wrapper = out_wrapper(my_function)
inner_wrapper('hello my_decorate')
- Hibernate_day03总结
- 服务器进程异常的原因分析(第二篇)(r8笔记第16天)
- 最近处理的几个小问题_20160311 (r8笔记第35天)
- Hibernate_day02总结
- Hibernate_day01总结
- ADG备库批量查询失败的原因分析(r8笔记第33天)
- 通过外部表改进一个繁琐的大查询 (r8笔记第32天)
- 一个简单的bigfile tablespace无法扩展的案例处理 (r8笔记第31天)
- 测试环境的迁移式升级和数据整合(r8笔记第27天)
- 增量数据丢失的原因分析(r8笔记第26天)
- Java全栈开发Spring学习第三天
- 一个oracle bug的简单验证(r8笔记第45天)
- 批量导出csv文件的基本尝试(r8笔记第44天)
- Golang 中的并发限制与超时控制
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法