📅  最后修改于: 2023-12-03 15:19:28.145000             🧑  作者: Mango
在Python中,可以通过函数包装器来打包/修改/装饰其他函数。函数包装器也被称为装饰器。函数包装器是Python的一个强有力的特性,它可以优雅、简洁地为现有代码添加新功能。
函数包装器的基本结构如下:
def wrapper_func(original_func):
def inner_func(*args, **kwargs):
# Do something before the original function is executed.
result = original_func(*args, **kwargs)
# Do something after the original function is executed.
return result
return inner_func
其中,wrapper_func
是函数包装器,inner_func
是它所返回的内部函数,original_func
是接收到的原始函数对象。可以看到,inner_func
通过接收任意数量的位置和关键字参数,实现了原始函数接口的一致性。
函数包装器的执行顺序如下:
wrapper_func
;wrapper_func
并将待包装的函数对象作为参数,返回内部函数对象inner_func
;inner_func
来执行被包装的函数,并返回结果。使用函数包装器的方法很简单,只需在待包装的函数定义前加上@wrapper_func
装饰器即可。如下所示:
@wrapper_func
def original_func(x, y):
return x + y
这将会将original_func
函数对象作为参数传递给wrapper_func
,并返回内部函数inner_func
。inner_func
将执行original_func
函数,并在函数执行前后添加一些操作。
函数包装器的一个常见用例是在函数执行前后添加日志。这样,在每次函数被调用时,日志信息都将被打印出来。下面是一个基本实现:
import logging
def log_execution_time(func):
def wrapper(*args, **kwargs):
logging.info("Executing %s", func.__name__)
result = func(*args, **kwargs)
logging.info("Executed %s in %s seconds", func.__name__, time.time() - start_time)
return result
return wrapper
使用方法:
@log_execution_time
def my_function():
# do something
本文简要介绍了Python中函数包装器的概念、用法以及实际应用场景。函数包装器是Python编程范式中的一个重要特性,可以提高代码的可读性、重用性和可维护性。