首页 > 后端开发 > Python教程 > 了解 Python 装饰器:带有示例的初学者指南

了解 Python 装饰器:带有示例的初学者指南

Barbara Streisand
发布: 2025-01-27 16:12:11
原创
820 人浏览过

Understanding Python Decorators: A Beginner’s Guide with Examples

Python 装饰器:初学者指南及示例

Python 装饰器是修改函数或方法行为的强大且通用的工具。它们允许您在不改变代码结构的情况下向现有代码添加功能。本文将深入剖析装饰器,并提供简单的示例来帮助您有效地理解和使用它们。


装饰器是什么?

Python 中的装饰器本质上是一个函数,它接收另一个函数作为参数并扩展或改变其行为。装饰器通常用于向现有函数或方法添加日志记录、访问控制、记忆化或验证等功能。

Python 中的装饰器使用 @decorator_name 语法应用于函数定义之上。


装饰器的结构

一个基本的装饰器函数具有以下结构:

def decorator_function(original_function):
    def wrapper_function(*args, **kwargs):
        # 在原始函数执行之前的代码
        result = original_function(*args, **kwargs)
        # 在原始函数执行之后的代码
        return result
    return wrapper_function
登录后复制

应用装饰器

您可以使用 @decorator_name 语法或手动方式将装饰器应用于函数:

@decorator_function
def some_function():
    print("这是原始函数。")

# 等同于:
# some_function = decorator_function(some_function)
登录后复制

示例 1:基本装饰器

让我们创建一个简单的装饰器,在函数运行之前和之后打印一条消息。

def simple_decorator(func):
    def wrapper():
        print("函数调用之前。")
        func()
        print("函数调用之后。")
    return wrapper

@simple_decorator
def say_hello():
    print("Hello, World!")

say_hello()
登录后复制

输出:

<code>函数调用之前。
Hello, World!
函数调用之后。</code>
登录后复制

示例 2:带参数的装饰器

您可以创建一个接受参数的装饰器,方法是将其包装在另一个函数中。

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

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

greet("Alice")
登录后复制

输出:

<code>Hello, Alice!
Hello, Alice!
Hello, Alice!</code>
登录后复制

装饰器的实际应用

装饰器广泛应用于实际场景中。以下是一些简化的实际示例:

1. 记录用户操作

您可以使用装饰器来记录用户每次执行操作的时间。

def log_action(func):
    def wrapper(*args, **kwargs):
        print(f"操作:正在执行 {func.__name__}。")
        return func(*args, **kwargs)
    return wrapper

@log_action
def upload_file(filename):
    print(f"正在上传 {filename}...")

upload_file("report.pdf")
登录后复制

输出:

<code>操作:正在执行 upload_file。
正在上传 report.pdf...</code>
登录后复制

2. 跟踪执行时间

跟踪任务执行所需的时间,这对于性能监控非常有用。

import time

def track_time(func):
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        end = time.time()
        print(f"{func.__name__} 执行耗时 {end - start:.2f} 秒。")
        return result
    return wrapper

@track_time
def download_file(file_size):
    time.sleep(file_size / 10)  # 模拟下载时间
    print("下载完成。")

download_file(50)
登录后复制

输出:

<code>下载完成。
download_file 执行耗时 5.00 秒。</code>
登录后复制

3. 添加用户问候语

装饰器可以通过添加动态元素来个性化问候语。

def add_greeting(func):
    def wrapper(name):
        print("您好,欢迎!")
        func(name)
    return wrapper

@add_greeting
def show_user_profile(name):
    print(f"用户资料:{name}")

show_user_profile("Alice")
登录后复制

输出:

<code>您好,欢迎!
用户资料:Alice</code>
登录后复制

关键要点

  • 装饰器是修改函数或方法行为的强大方法。
  • 它们可以简化重复性任务,例如日志记录、计时或个性化。
  • 使用 @decorator 语法可以方便地应用它们。
  • 装饰器可以接受参数并嵌套使用,以增强灵活性。

通过掌握装饰器,您将掌握一个编写简洁高效的 Python 代码的宝贵工具。开始尝试提供的示例,以熟悉这个概念!

以上是了解 Python 装饰器:带有示例的初学者指南的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板