装饰器(Decorator)是 Python 中一种非常强大的功能,它允许你在不修改原有函数代码的情况下,动态地为函数添加新的功能。装饰器本质上是一个函数,它接收一个函数作为参数,并返回一个新的函数。通过使用装饰器,你可以优雅地实现代码复用、增强函数功能,同时保持代码的简洁性和可读性。
本文将详细介绍 Python 装饰器的基本概念、使用方法以及一些常见的应用场景,帮助你更好地理解和使用这一强大的工具。
一、装饰器的基本概念
1. 什么是装饰器?
装饰器是一个函数,它接受一个函数作为参数,并返回一个新的函数。装饰器的作用是对原始函数进行“装饰”,即在原始函数的基础上添加额外的功能,而无需修改原始函数的代码。
2. 装饰器的语法
装饰器的定义通常使用 @decorator_name
的语法糖。这种语法糖本质上是将函数传递给装饰器,并将装饰器返回的函数替换原始函数。
例如:
Python复制
@decorator_name
def my_function():
pass
等价于:
Python复制
def my_function():
pass
my_function = decorator_name(my_function)
3. 一个简单的装饰器示例
假设我们有一个函数 greet()
,我们希望在每次调用该函数时记录调用的时间。可以使用装饰器来实现这一功能,而无需修改 greet()
函数的代码。
Python复制
import time
def log_time(func):
def wrapper():
print(f"Function {func.__name__} called at {time.ctime()}")
return func()
return wrapper
@log_time
def greet():
print("Hello, World!")
greet()
输出:
复制
Function greet called at Mon Feb 26 10:00:00 2024
Hello, World!
在这个例子中:
-
log_time
是一个装饰器函数,它接收一个函数func
作为参数。 -
wrapper
是一个内部函数,它在调用原始函数