装饰器:Python函数式编程概念的应用
发布时间:2023-06-18 16:43:41
装饰器是Python函数式编程概念的重要应用之一。它可以在不改变原函数代码的情况下,为函数添加额外的功能,相当于给函数“装饰”上新的特性,因此称之为装饰器。
常用的装饰器有:@classmethod、@staticmethod等,它们可以直接应用在类中的函数上,也可以添加到普通函数上。
下面通过一个简单的例子来了解装饰器的实现过程,我们定义一个函数,输出字符串的长度,并在函数前添加一个装饰器,用于输出函数执行时间:
import time
def add_time(f):
def wrapper(*args, **kwargs):
start_time = time.time()
result = f(*args, **kwargs)
end_time = time.time()
print("函数执行时间为:",end_time - start_time)
return result
return wrapper
@add_time
def get_len(s):
return len(s)
print(get_len("hello world!"))
运行代码,输出:
函数执行时间为: 8.821487426757812e-06 12
我们可以看到,在调用函数get_len时,装饰器add_time先执行了,统计了函数执行时间,并在输出结果后返回了结果。这样,我们不需要改变函数get_len的内容,就可以为其添加新的特性。
同时,装饰器还有一个很奇妙的特性,我们可以通过多个装饰器,为一个函数添加多个特性,如:
import time
def add_time(f):
def wrapper(*args, **kwargs):
start_time = time.time()
result = f(*args, **kwargs)
end_time = time.time()
print("函数执行时间为:",end_time - start_time)
return result
return wrapper
def add_info(f):
def wrapper(*args, **kwargs):
print("函数名为:", f.__name__)
return f(*args, **kwargs)
return wrapper
@add_time
@add_info
def get_len(s):
return len(s)
print(get_len("hello world!"))
运行代码,输出:
函数名为: wrapper 函数执行时间为: 1.1920928955078125e-06 12
可以看到,在函数调用时,add_info先应用,输出函数名为wrapper,然后add_time应用,输出函数执行时间。
总结一下,装饰器是Python函数式编程概念的重要应用之一,它可以为函数添加新的特性,同时不改变函数原有的功能。在日常编程中,我们可以通过定义自己的装饰器,来简化重复的代码,并且增加代码的可读性。
