def once_only(func):
called_funcs = {}
@wraps(func)
def wrapper(*args, **kwgs):
if func.__name__ not in called_funcs:
result = obj = func(*args, **kwgs)
if isinstance(obj, types.GeneratorType):
def gi_wrapper():
while True:
result = obj.next()
called_funcs[func.__name__] = result
yield result
return gi_wrapper()
else:
called_funcs[func.__name__] = result
return result
else:
return called_funcs[func.__name__]
return wrapper
评论列表
文章目录