如何在 Python 中定义并调用装饰器函数
发布时间:2023-05-29 02:20:11
装饰器函数是 Python 中一种常见的高阶函数,其作用是对其他函数进行增强或修改。在 Python 中,装饰器函数可以使用 @ 语法糖来定义和调用,也可以使用普通的函数调用语法来定义和调用。
下面是一个用于计算函数运行时间的装饰器函数示例:
import time
def time_it(func):
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
end = time.time()
print(f"{func.__name__} took {end - start} seconds to run.")
return result
return wrapper
@time_it
def my_func():
time.sleep(1)
my_func()
在上面的示例中,我们定义了一个 time_it 装饰器函数,它接受一个函数作为参数,并返回一个内部函数 wrapper。在 wrapper 函数中,我们使用了 time 模块来计算函数运行时间,并输出了函数名称和运行时间。最后,我们返回了函数的结果。
使用 @ 语法糖来装饰 my_func 函数,相当于执行了以下代码:
my_func = time_it(my_func)
这样,当我们调用 my_func 函数时,实际上是先调用 wrapper 函数,然后再执行 my_func 函数。在 wrapper 函数中计算运行时间,并输出结果。
除了使用 @ 语法糖来定义装饰器函数外,我们还可以使用普通的函数调用语法来定义和使用装饰器函数。以下是示例代码:
import time
def time_it(func):
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
end = time.time()
print(f"{func.__name__} took {end - start} seconds to run.")
return result
return wrapper
def my_func():
time.sleep(1)
my_func = time_it(my_func)
在这个示例中,我们首先定义了一个 time_it 装饰器函数,然后定义了一个普通的 my_func 函数。在将函数作为参数传递给 time_it 函数时,我们使用了普通的函数调用语法。
最后,我们将装饰过的 my_func 函数重新赋值给 my_func 变量。这样,当我们调用 my_func 函数时,实际上也是调用了 wrapper 函数,然后再执行 my_func 函数。
总结来说,在 Python 中定义和调用装饰器函数,可以使用 @ 语法糖来定义,并在需要增强或修改函数行为时使用。也可以使用普通的函数调用语法来定义和使用装饰器函数。无论使用哪种方式,装饰器函数都是 Python 中非常强大和灵活的工具。
