需求:
实现一个装饰器,把一个函数变成只调用一次的函数。
实现:
def only_run_once(func):
@functools.wraps(func)
def wrapper_only_run_once(*args, **kwargs):
if wrapper_only_run_once.first_call == 0:
return wrapper_only_run_once.result
else:
wrapper_only_run_once.first_call = 0
wrapper_only_run_once.result = func(*args, **kwargs)
return wrapper_only_run_once.result
wrapper_only_run_once.first_call = 1
wrapper_only_run_once.result=0
return wrapper_only_run_once
@only_run_once
def get_max_age():
print('here i am')
return 2
print(get_max_age())
print(get_max_age())
输出:
here i am 2 2
本文介绍了如何使用Python装饰器来创建一个功能,确保被装饰的函数只会被执行一次。通过定义一个内部函数`wrapper_only_run_once`并利用`functools.wraps`保持原函数元信息,当首次调用时执行`func`,并将结果存储,后续调用直接返回结果。示例中`get_max_age`函数仅打印'hereiam'和返回2一次,后续调用不再执行。
1294

被折叠的 条评论
为什么被折叠?



