热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python带有参数的装饰器介绍及使用方法

本文介绍了Python中带有参数的装饰器的概念和使用方法,并提供了装饰器的语法格式和错误写法。同时,还给出了一个加法计算的例子,并展示了执行结果。

1. 带有参数的装饰器介绍

带有参数的装饰器就是使用装饰器装饰函数的时候可以传入指定参数,语法格式: @装饰器(参数,…)

错误写法:

def decorator(fn, flag):def inner(num1, num2):if flag == "+":print("--正在努力加法计算--")elif flag == "-":print("--正在努力减法计算--")result = fn(num1, num2)return resultreturn inner@decorator('+')
def add(a, b):result = a + breturn resultresult = add(1, 3)
print(result)

执行结果:

Traceback (most recent call last):
File “/home/python/Desktop/test/hho.py”, line 12, in
@decorator(’+’)
TypeError: decorator() missing 1 required positional argument: ‘flag’
代码说明:

装饰器只能接收一个参数,并且还是函数类型。

正确写法:

在装饰器外面再包裹上一个函数,让最外面的函数接收参数,返回的是装饰器,因为@符号后面必须是装饰器实例。

# 添加输出日志的功能
def logging(flag):def decorator(fn):def inner(num1, num2):if flag == "+":print("--正在努力加法计算--")elif flag == "-":print("--正在努力减法计算--")result = fn(num1, num2)return resultreturn inner# 返回装饰器return decorator# 使用装饰器装饰函数
@logging("+")
def add(a, b):result = a + breturn result@logging("-")
def sub(a, b):result = a - breturn resultresult = add(1, 2)
print(result)result = sub(1, 2)
print(result)

–正在努力加法计算–
3
–正在努力减法计算–
-1


2. 小结

使用带有参数的装饰器,其实是在装饰器外面又包裹了一个函数,使用该函数接收参数,返回是装饰器,因为 @ 符号需要配合装饰器实例使用


推荐阅读
author-avatar
程璇
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有