下面就为大家详细讲解Python装饰器的使用方法:
装饰器的定义和作用
装饰器本质上就是一个函数,它可以接受一个或多个函数作为输入,然后在不改变原函数结构的情况下,为这个函数增加一些额外的功能。
常见的一些装饰器功能包括:授权、日志、缓存、输入合理性检查等。
装饰器的一些优点包括:
- 在不修改原函数代码的情况下,增加了其他功能。
- 装饰器本身是一个函数,因此可以被复用多次。
- 通过管理原函数的元数据,更加方便的调试函数。
下面我们通过两个具体的例子来详细介绍Python装饰器的使用方法。
装饰器示例一:统计函数运行时间
在Python中,我们有很多工具可以直接计算函数的执行时间,如timeit和profile等,但是我们也可以通过装饰器来实现这个功能。
下面是一个简单的统计函数运行时间的装饰器:
import time
def time_it(func):
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
end = time.time()
print("{}运行时间为:{}秒".format(func.__name__, end-start))
return result
return wrapper
@time_it
def add(a, b):
time.sleep(1)
return a + b
result = add(1, 2)
print(result)
输出结果为:
add运行时间为:1.0002155303955078秒
3
从输出结果可以看出,装饰器函数time_it成功统计了函数add的运行时间,并且输出了运行时间。
装饰器示例二:打印函数参数和返回值
一个常见的问题是,如何方便地调试和确认函数的参数、返回值和执行情况。
我们可以通过装饰器来解决这个问题,下面是一个简单地打印函数参数和返回值的装饰器:
def print_args(func):
def wrapper(*args, **kwargs):
print("函数{}的参数为:{}".format(func.__name__, (args, kwargs)))
result = func(*args, **kwargs)
print("函数{}的返回值为:{}".format(func.__name__, result))
return result
return wrapper
@print_args
def add(a, b):
return a + b
@print_args
def sub(a, b):
return a - b
result1 = add(1, 2)
result2 = sub(3, 2)
输出结果为:
函数add的参数为:((1, 2), {})
函数add的返回值为:3
函数sub的参数为:((3, 2), {})
函数sub的返回值为:1
从输出结果可以看出,装饰器函数print_args成功打印了函数的参数和返回值。
以上就是Python装饰器的介绍和使用方法,希望对大家有所帮助。