python - 直接使用 args 调用 python 装饰器(即不包装另一个函数)
问题描述
假设我有一个装饰器,它本身可以接受参数,如下所示:
def my_decorator_with_args(decorator_arg):
def decorator(func):
@wraps(func)
def inner(*args, **kwargs):
# some arbitrary logic using the decorator_arg(s)
if decorator_arg == 100:
print(f'Not running {func}')
else:
return func(*args, **kwargs)
return inner
return decorator
和一些要装饰的功能,例如
def add(x,y):
return x + y
而且我想my_decorator_with_args
直接作为高阶函数调用而不是用它装饰函数,我知道我可以执行以下操作:
from functools import partial
p = partial(add, 1,2)
In [50]:z = my_decorator_with_args(100)(p)()
Out[50]: Not running functools.partial(<function add at 0x10db7a290>, 1, 2)
In [51]: z = my_decorator_with_args(99)(p)()
In [52]: z
Out[52]: 3
但是有没有更优雅/可读的方式来实现这一点?
解决方案
推荐阅读
- php - WooCommerce 以编程方式修改购物车总数
- python-3.x - 为 Pybluez 安装 GATTlib?
- excel - 查找具有可变范围的缺失数字 for 循环
- dropbox - Dropbox 的连接数量有限。有什么办法可以解决吗?
- c++ - 为什么使用 NULL 指针调用类方法?
- javascript - 仅获取图像 URL 的替换字符失败
- angular - Angular中使用flatMap的大量api调用
- node.js - Async/Await 在递归函数中不起作用
- javascript - 在属性中附加带有三引号的 HTML
- c++ - 有没有办法在 GFlags 中传递带有命令行参数的整数数组?