Jar*_*ith 3 python functional-programming python-3.x
我创建了一个装饰工厂,它由自定义日志记录功能参数化,如下所示:
def _log_error(logger):
def decorator(f):
@wraps(f)
def wrapper(*args, **kwargs):
try:
return f(*args, **kwargs)
except Exception as e:
logger(e)
return None
return wrapper
return decorator
Run Code Online (Sandbox Code Playgroud)
我现在想用它来装饰部分应用的函数foo:
foo = partial(bar, someparam)
Run Code Online (Sandbox Code Playgroud)
我已经尝试了以下所有方法:
@_log_error(logger)
foo = partial(bar, someparam)
log_error = _log_error(logger)
@log_error
foo = partial(...)
foo = partial(...)
@log_error
foo
@log_error
(foo = partial(...))
Run Code Online (Sandbox Code Playgroud)
AFAICT log_error = _log_error(logger) / @log_error
和@_log_error(logger)
看起来完全有效的生成装饰器的方法,它在正常声明的函数上工作正常.但是当试图在部分应用的函数上使用时,我在开始时得到语法错误foo =
,并且在使用装饰器时获得优秀资源的google搜索,并且functools.partial
通常在这个特定情况下没有给我任何东西.
装饰器不适用于作业.但是因为使用装饰器与调用装饰器是一样的,所以你可以这样做
foo = _log_error(logger)(partial(bar, someparam))
Run Code Online (Sandbox Code Playgroud)