Python装饰器是高阶函数,用于在不修改代码的情况下扩展或修改函数行为。它们提供可重用性、模块化和无侵入性的功能增强。

简介: 【6月更文挑战第20天】Python装饰器是高阶函数,用于在不修改代码的情况下扩展或修改函数行为。它们提供可重用性、模块化和无侵入性的功能增强。例如,`@simple_decorator` 包装`my_function`,在调用前后添加额外操作。装饰器还能接受参数,如`@logged("INFO", "msg")`,允许动态定制功能。

装饰器(Decorator)是 Python 中一种强大的工具,它允许我们在不修改源代码的情况下扩展或修改函数、类等对象的行为。装饰器本质上是一个接收一个函数作为参数并返回一个新的函数的高阶函数。

功能:

  1. 可重用性:装饰器提供了在多个函数上应用相同行为的一种方式,比如添加日志、性能分析、权限控制等。
  2. 模块化:通过将装饰器定义为独立的函数或类,可以将相关的功能封装在一起,提高代码的组织性和可读性。
  3. 无侵入性:装饰器不会改变原始函数的名称和元信息,对调用者来说透明。

用法:

装饰器的语法糖使得使用它们变得非常直观和简洁。以下是装饰器的基本用法:

# 定义一个简单的装饰器
def simple_decorator(func):
    def wrapper(*args, **kwargs):
        print("Before function call")
        result = func(*args, **kwargs)
        print("After function call")
        return result
    return wrapper

# 使用装饰器来包装函数
@simple_decorator
def my_function():
    print("Function body")

# 调用函数
my_function()

在这个例子中,simple_decorator 是一个装饰器函数,它接收一个函数 func 作为参数,并返回一个新的函数 wrapper。当我们在 my_function 上使用 @simple_decorator 装饰器时,实际上是用 wrapper 函数替换了原来的 my_function。因此,当我们调用 my_function() 时,实际上执行的是 wrapper(),这会导致在调用前后打印出相应的消息。

除了这个基本的用法,装饰器还可以接受参数,以便提供更灵活的功能。例如,下面是一个带有参数的装饰器示例:

from functools import wraps

def logged(level, message=""):
    def decorator(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            print(f"{level}: {message} - Before function call")
            result = func(*args, **kwargs)
            print(f"{level}: {message} - After function call")
            return result
        return wrapper
    return decorator

@logged("INFO", "Performing calculation")
def calculate(x, y):
    return x + y

result = calculate(3, 4)
print(result)  # 输出:
# INFO: Performing calculation - Before function call
# 7
# INFO: Performing calculation - After function call

在这个例子中,logged 装饰器接受两个参数 levelmessage,并在装饰函数时传入这些值。这样,我们可以在不同的地方使用同一个装饰器,但可以根据需要定制其行为。

相关文章
|
23小时前
|
Python
|
1天前
|
存储 Python
离散事件模拟(Discrete Event Simulation)详解与Python代码示例
离散事件模拟(Discrete Event Simulation)详解与Python代码示例
|
1天前
|
供应链 Python
供需匹配(Demand-Supply Matching)的详细解释与Python代码示例
供需匹配(Demand-Supply Matching)的详细解释与Python代码示例
|
1天前
|
供应链 Python
Demand Forecasting模型解释与Python代码示例
Demand Forecasting模型解释与Python代码示例
|
9天前
|
安全 Python
告别低效编程!Python线程与进程并发技术详解,让你的代码飞起来!
【7月更文挑战第9天】Python并发编程提升效率:**理解并发与并行,线程借助`threading`模块处理IO密集型任务,受限于GIL;进程用`multiprocessing`实现并行,绕过GIL限制。示例展示线程和进程创建及同步。选择合适模型,注意线程安全,利用多核,优化性能,实现高效并发编程。
23 3
|
11天前
|
开发者 Python
Python元类实战:打造你的专属编程魔法,让代码随心所欲变化
【7月更文挑战第7天】Python的元类是编程的变形师,用于创建类的“类”,赋予代码在构建时的变形能力。
33 1
|
12天前
|
设计模式 存储 Python
Python元类大揭秘:从理解到应用,一步步构建你的编程帝国
【7月更文挑战第6天】Python元类是创建类的对象的基石,允许控制类的生成过程。通过自定义元类,可在类定义时动态添加方法或改变行为。
18 0
|
9天前
|
数据采集 大数据 数据安全/隐私保护
Python编程:如何有效等待套接字的读取与关闭
Python网络编程中,套接字事件处理至关重要。利用`selectors`模块和代理IP能增强程序的稳定性和可靠性。代码示例展示了如何通过代理连接目标服务器,注册套接字的读写事件并高效处理。在代理IP配置、连接创建、事件循环及回调函数中,实现了数据收发与连接管理,有效应对网络爬虫或聊天应用的需求,同时保护了真实IP。
Python编程:如何有效等待套接字的读取与关闭
|
4天前
|
数据挖掘 开发者 Python
如何自学Python编程?
【7月更文挑战第14天】如何自学Python编程?
17 4
|
7天前
|
Python
不容错过!Python中图的精妙表示与高效遍历策略,提升你的编程艺术感
【7月更文挑战第11天】在Python编程中,图以邻接表或邻接矩阵表示,前者节省空间,后者利于查询连接。通过字典实现邻接表,二维列表构建邻接矩阵。图的遍历包括深度优先搜索(DFS)和广度优先搜索(BFS)。DFS使用递归,BFS借助队列。这些基础技巧对于解决复杂数据关系问题,如社交网络分析或迷宫求解,至关重要,能提升编程艺术。
15 5