Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python进阶——带有参数的装饰器

Python进阶——带有参数的装饰器

原创
作者头像
落雨
发布于 2022-03-08 02:52:52
发布于 2022-03-08 02:52:52
33.4K10
代码可运行
举报
文章被收录于专栏:落雨的专栏落雨的专栏
运行总次数:0
代码可运行

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

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

错误写法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def decorator(fn, flag):
    def inner(num1, num2):
        if flag == "+":
            print("--正在努力加法计算--")
        elif flag == "-":
            print("--正在努力减法计算--")
        result = fn(num1, num2)
        return result
    return inner


@decorator('+')
def add(a, b):
    result = a + b
    return result

result = add(1, 3)
print(result)

执行结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Traceback (most recent call last):
  File "/home/python/Desktop/test/hho.py", line 12, in <module>
    @decorator('+')
TypeError: decorator() missing 1 required positional argument: 'flag'

代码说明:

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

正确写法:

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 添加输出日志的功能
def logging(flag):

    def decorator(fn):
        def inner(num1, num2):
            if flag == "+":
                print("--正在努力加法计算--")
            elif flag == "-":
                print("--正在努力减法计算--")
            result = fn(num1, num2)
            return result
        return inner

    # 返回装饰器
    return decorator


# 使用装饰器装饰函数
@logging("+")
def add(a, b):
    result = a + b
    return result


@logging("-")
def sub(a, b):
    result = a - b
    return result

result = add(1, 2)
print(result)

result = sub(1, 2)
print(result)

2. 小结

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
1 条评论
热度
最新
终于明白带参装饰器了,感谢
终于明白带参装饰器了,感谢
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
「Python」闭包与装饰器
请注意,本文编写于 1730 天前,最后修改于 999 天前,其中某些信息可能已经过时。
曼亚灿
2023/05/17
2100
闭包和装饰器
前面学习了函数,知道了当函数调用完,函数内定义的变量都销毁了,但是我们有时候需要保存函数内的这个变量,每次在这个变量的基础上完成一系列的操作,比如:每次在这个变量的基础上和其它数字进行求和计算,那应该如何操作呢
用户9399690
2022/01/20
3620
闭包和装饰器
【Python小脚本】基于装饰器的方法日志脚本
在一般的编程语言中,比如Java,C,C++,C#中,我们知道一个函数调用完,函数内定义的变量都销毁了,有时候需要保存函数内的这些变量,在这些变量的基础上完成一些操作。我们只能通过返回值的方式来处理
山河已无恙
2023/03/02
3740
Python进阶——通用装饰器的使用
1. 装饰带有参数的函数 # 添加输出日志的功能 def logging(fn): def inner(num1, num2): print("--正在努力计算--") fn(num1, num2) return inner # 使用装饰器装饰函数 @logging def sum_num(a, b): result = a + b print(result) sum_num(1, 2) 运行结果: --正在努力计算-- 3 2. 装
落雨
2022/03/08
29.1K0
装饰器、计时器、计数器
又到了我最烦的内容了哈哈哈,装饰器,早上起床过了一遍,把运行结果都标上了方便看。
y191024
2022/09/20
4320
装饰器、计时器、计数器
Python装饰器的使用
简单使用 def decorator(new_func): def inner(): print("+++") new_func() return inner @decorator def show(): print("BBB") show() #结果如下: +++ BBB 装饰器带有参数的函数 def decorator(func): def inner(num1,num2): print("计算结果如下:")
hankleo
2020/09/17
5310
Python闭包、装饰器、语法糖
函数高级的用法,本文将使用案例来讲解Python闭包、装饰器、语法糖。 文章目录 函数高级 闭包 装饰器 语法糖 函数高级 我们前面已经学过了函数,我们知道当函数调用完,函数内定义的变量都销毁
北山啦
2022/10/31
2290
Python闭包、装饰器、语法糖
Python装饰器
Python装饰器对于Python初学者可能是一个比较抽象的概念,在了解装饰器之前,我们必须先熟悉Pythond方法的一个特性:Python中的方法可以像普通变量一样当做参数传递给另外一个方法,我们来看一个例子:
清风穆云
2021/08/09
5190
Python装饰器、内置函数之金兰契友
装饰器:装饰器的实质就是一个闭包,而闭包又是嵌套函数的一种。所以也可以理解装饰器是一种特殊的函数。 因为程序一般都遵守开放封闭原则,软件在设计初期不可能把所有情况都想到,所以一般软件都支持功能上的扩展,而对源代码的修改是封闭的。 开放封闭原则主要体现在两个方面:
py3study
2020/01/17
3870
Python入门之装饰器
讲 Python 装饰器前,我想先举个例子,虽有点污,但跟装饰器这个话题很贴切。 每个人都有的内裤主要功能是用来遮羞,但是到了冬天它没法为我们防风御寒,咋办?我们想到的一个办法就是把内裤改造一下,让它变得更厚更长,这样一来,它不仅有遮羞功能,还能提供保暖,不过有个问题,这个内裤被我们改造成了长裤后,虽然还有遮羞功能,但本质上它不再是一条真正的内裤了。于是聪明的人们发明长裤,在不影响内裤的前提下,直接把长裤套在了内裤外面,这样内裤还是内裤,有了长裤后宝宝再也不冷了。装饰器就像我们这里说的长裤,在不影响内裤作用
Jetpropelledsnake21
2018/05/03
7220
Python 无固定参数装饰器
Python 装饰器(fuctional decorators)是用于拓展原来函数功能的一种函数,目的是在不改变原函数名(或类名)的情况下,给函数增加新的功能。 这个函数的特殊之处在于它的返回值也是一个函数,这个函数是内嵌"原"函数的函数。
Wu_Candy
2022/07/04
3500
Python 装饰器再探
在实际代码中可能需要使用参数化的装饰器。如果用函数作为装饰器的话,那么解决方法很简单:再增加一层包装。例如:
用户6021899
2021/08/20
3770
深入理解闭包与装饰器
闭包是指一个函数(内层函数)能够“记住”并访问它所在作用域的变量(外层函数的变量),即使在外层函数已经返回的情况下。
Heaven645
2024/08/14
940
深入理解闭包与装饰器
Python装饰器链式调用
在Python中,装饰器是一项强大的工具,用于修改函数或类的行为,而装饰器链式调用(Chained Decorators)则是一种精巧的技术,可以在函数上应用多个装饰器,以一种干净、组织良好的方式增强代码的功能性。本文将深入探讨装饰器链式调用的原理,为你提供清晰的代码示例,并指导你如何使用这一技巧来提升你的Python代码的可读性和可维护性。
疯狂的KK
2023/10/12
5360
Python装饰器链式调用
惊!Python新手竟能做出这些?简易计算器、天气预报系统...你也可以!
项目描述: 编写一个Python程序,用于读取一个文本文件的内容,并将其内容写入到另一个文本文件中。
小白的大数据之旅
2024/11/20
1040
惊!Python新手竟能做出这些?简易计算器、天气预报系统...你也可以!
python装饰器学习笔记
装饰器用于修改或扩展函数或方法的行为。装饰器本质上是一个高阶函数,它可以接受一个或者多个函数作为参数,并返回一个新的函数。
薛定谔的馋猫
2024/11/03
970
Python装饰器的详细解析
Python装饰器(fuctional decorators)就是用于拓展原来函数功能的一种函数,目的是在不改变原函数名(或类名)的情况下,给函数增加新的功能。
用户8949263
2022/04/08
5720
Python中的装饰器详解及实际应用
在Python编程中,装饰器(Decorator)是一种强大而灵活的工具,用于修改函数或方法的行为。它们广泛应用于许多Python框架和库,如Flask、Django等。本文将深入探讨装饰器的概念、使用方法,并提供实际应用的代码示例和详细解析。
一键难忘
2024/04/16
6290
[Python基础09]函数|匿名函数|偏函数|装饰器函数
函数的递归,就是让在函数的内部调用函数自身的情况,这个函数就是递归函数。 递归函数其实是另外一种意义的循环 如:计算一个数字的阶乘操作,将这个功能封装成函数fact(num) 提示:阶乘算法是按照小于等于当前数字的自然数进行乘法运算 计算5的阶乘:5 X 4 X 3 X 2 X1 计算n的阶乘:n X (n - 1) X … X 3 X 2 X 1
周小董
2022/04/12
1.4K0
[Python基础09]函数|匿名函数|偏函数|装饰器函数
python中装饰器的参数与返回值
# 函数中如果没有使用return返回值,默认情况函数也是有返回值的,默认返回None
用户7886150
2020/12/19
9070
相关推荐
「Python」闭包与装饰器
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验