首页 > 编程语言 >Python 装饰器

Python 装饰器

时间:2024-09-21 15:50:39浏览次数:7  
标签:函数 Python wrapper def func 装饰 decorator

装饰器(Decorator)是 Python 中的一种高级函数,它允许你在不修改函数定义的情况下,动态地扩展或修改函数的功能。装饰器本质上是一个返回函数的函数,可以将一个函数作为输入,并返回一个增强后的函数。

装饰器的基本概念

装饰器通常用于以下几种场景:

  1. 增强函数功能:在不改变原函数代码的情况下,添加额外的功能。
  2. 代码复用:通过装饰器,可以将一些常用的功能封装起来,避免代码重复。
  3. 代码清晰:使用装饰器可以使代码结构更加清晰和模块化。

装饰器的基本语法

装饰器的基本语法使用 @ 符号,放在函数定义的前一行。例如:

def my_decorator(func):
    def wrapper():
        print("Something is happening before the function is called.")
        func()
        print("Something is happening after the function is called.")
    return wrapper

@my_decorator
def say_hello():
    print("Hello!")

say_hello()

在这个例子中, my_decorator 是一个装饰器,它接收一个函数 func 作为参数,并返回一个新的函数 wrapper。当你调用 say_hello() 时,实际上调用的是 wrapper 函数,从而在不修改 say_hello 函数的情况下,扩展了它的功能。

带参数的装饰器

装饰器不仅可以用于不带参数的函数,也可以用于带参数的函数。例如:

def my_decorator(func):
    def wrapper(*args, **kwargs):
        print("Something is happening before the function is called.")
        result = func(*args, **kwargs)
        print("Something is happening after the function is called.")
        return result
    return wrapper

@my_decorator
def greet(name):
    print(f"Hello, {name}!")

greet("Alice")

在这个例子中, wrapper 函数使用了 *args**kwargs 来接受所有位置参数和关键字参数,并将这些参数传递给 func,确保装饰器可以用于任意参数的函数。

带参数的装饰器函数

如果你需要让装饰器本身接受参数,可以使用三层嵌套的函数结构。例如:

def repeat(n):
    def decorator(func):
        def wrapper(*args, **kwargs):
            for _ in range(n):
                func(*args, **kwargs)
        return wrapper
    return decorator

@repeat(3)
def say_hello():
    print("Hello!")

say_hello()

在这个例子中,repeat 是一个返回装饰器的函数,它接收一个参数 n,表示需要调用的次数。 decorator 是实际的装饰器,而 wrapper 是增强后的函数。

总结

装饰器是一个强大的工具,允许你在不改变函数定义的情况下,动态地扩展或修改函数的行为。它们广泛应用于日志记录、性能测量、访问控制等场景。通过使用装饰器,可以使代码更加模块化、清晰和可维护。

标签:函数,Python,wrapper,def,func,装饰,decorator
From: https://www.cnblogs.com/Undefined443/p/18424122

相关文章

  • Python 高阶内容:深拷贝与浅拷贝揭秘复制的“玄学”
    Python高阶内容:深拷贝与浅拷贝揭秘复制的“玄学”文章目录Python高阶内容:深拷贝与浅拷贝揭秘复制的“玄学”一copy数据示例一示例二二深拷贝与浅拷贝三copy对比基本概念对比实现方式对比四完整代码示例五源码地址在Python中,复制操作并不是简单地将对......
  • Python 高阶内容:简化代码的终极技巧
    Python高阶内容:简化代码的终极技巧文章目录Python高阶内容:简化代码的终极技巧一Lambda:更直接的Function1常规函数写法和调用2lambda写法二一行`for`能解决的事1常规写法2简写3简写创建字典三一行if-else行天下1常规写法2简写四一行`for+`判......
  • Python数论应用
    引言        在前面的课程中,我们已经学习了Python的基本输入输出、数据类型及其转换、顺序结构、分支结构、循环结构、循环控制语句、字符串类型、列表类型、元组类型、字典类型、集合类型、函数的定义与使用、函数调用与作用域、函数的高级应用、质数、倍数与余数......
  • 中国电子学会202406青少年软件编程(Python)等级考试试卷(四级)真题
    青少年软件编程(Python)等级考试试卷(四级)2024-6一、单选题(共25题,共50分)1.执行以下程序后所输出的结果是?()A   20   B   41   C   21   D   912.以下说法错误的是?()A  python中可以在不同的自定义函数中声明相同名字的变量,使用时不会造成数据混乱B......
  • 中国电子学会202403青少年软件编程(Python)等级考试试卷(四级)真题
    202403Python四级真题一、选择题1、运行如下代码,若输入整数3,则最终输出的结果为?()deff(x):    ifx==1:        s=1    else:        s=f(x-1)*x    returnsn=int(input("请输入一个大于1的整数:"))print(f(n)+f(n......
  • 基于python的opencv图像处理基本操作
    一、如何下载opencv包在Python中下载OpenCV包,最常用的方法是使用pip命令。pip是Python的包安装工具,可以方便地从Python包索引(PyPI)安装和管理包。以下是一些基本的步骤和命令,帮助你通过pip安装OpenCV。在命令行中输入以下命令来安装OpenCV:pipinstallopencv-python在国内使......
  • 在 Ubuntu 20.04 服务器上安装 Python 3 并设置编程环境的方法
    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。简介Python编程语言越来越受到初学者和经验丰富的开发人员的青睐。Python灵活多变,在脚本编写、自动化、数据分析、机器学习和后端开发等方面具有优势。Python首次发布于......
  • python中函数式编程与高阶函数,装饰器与生成器,异常处理与日志记录以及项目实战
    函数式编程是Python强大且灵活的编程范式之一,与此同时,Python也为开发者提供了高阶函数、装饰器、生成器等工具,极大提高了代码的可读性和复用性。此外,异常处理与日志记录是编写可靠、可维护的Python代码的重要组成部分。最后,通过一个项目实战来整合这些概念。我们将从......
  • 计算机毕设设计推荐-基于python+Djanog大数据的电影数据可视化分析
    精彩专栏推荐订阅:在下方主页......
  • 如何使用 Python 的 sqlite3 模块操作 SQLite 数据库?
    如何使用Python的sqlite3模块操作SQLite数据库?SQLite是一种轻量级的数据库,它不需要服务器,数据库被存储在一个文件中,非常适合嵌入式系统或桌面应用程序。Python标准库中包含了一个名为sqlite3的模块,可以直接用于与SQLite数据库进行交互。本文将详细介绍如何使用......