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)
让我们创建一个简单的装饰器,在函数运行之前和之后打印一条消息。
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>
您可以创建一个接受参数的装饰器,方法是将其包装在另一个函数中。
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>
装饰器广泛应用于实际场景中。以下是一些简化的实际示例:
您可以使用装饰器来记录用户每次执行操作的时间。
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>
跟踪任务执行所需的时间,这对于性能监控非常有用。
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>
装饰器可以通过添加动态元素来个性化问候语。
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中文网其他相关文章!