Python函数中的装饰器:简化代码、提高可读性
Python函数中的装饰器可以帮助我们简化代码,提高可读性。装饰器是一个特殊的函数,它可以接收一个函数作为参数,并且返回一个新的函数。通过装饰器,我们可以在不修改原有函数的基础上,增加某些特定的功能或者改变函数的行为。下面我们来看看具体的例子。
1、装饰器实现函数计时器
'''
装饰器实现函数的计时器
'''
import time
def timer(func):
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
end = time.time()
print("函数 %s 耗时 %f s" % (func.__name__, end - start))
return result
return wrapper
@timer
def func():
time.sleep(2)
func()
# 函数 func 耗时 2.001145 s
上面的例子中,我们定义了一个装饰器 timer,它接收一个函数作为参数,返回一个新的函数 wrapper。在 wrapper 函数中,我们首先记录了函数执行前的时间,然后执行原函数,并记录了函数执行后的时间,最后计算出函数执行的时间并输出。通过使用 @timer 装饰器,我们将函数 func 加上了计时器功能,实现了函数计时器的功能。
2、装饰器实现函数日志
'''
装饰器实现函数的日志
'''
def logging(func):
def wrapper(*args, **kwargs):
print("%s is called" % func.__name__)
return func(*args, **kwargs)
return wrapper
@logging
def func():
print("I am func")
func()
# func is called
# I am func
上面的例子中,我们定义了一个装饰器 logging,它接收一个函数作为参数,返回一个新的函数 wrapper。在 wrapper 函数中,我们在调用原函数之前输出了日志信息。通过使用 @logging 装饰器,我们将函数 func 加上了日志信息,实现了函数日志的功能。
通过装饰器,我们可以实现很多有用的功能,如缓存、权限控制、性能分析等。在编写代码时,我们可以将一些通用的功能抽离出来作为装饰器,然后在需要使用这些功能的函数上加上相应的装饰器,从而可以在不修改原函数的情况下实现特定的功能。这样既可以提高代码的可读性,又可以减少代码的重复性。
