python - 装饰器从标准输出中保存文本文件
问题描述
受此Q/A的启发,以下内容就像一个魅力:
from contextlib import redirect_stdout
def save_summary(model, filename):
with open(filename, 'w') as f:
with redirect_stdout(f):
model.summary()
return
save_summary(model, 'model_sum.txt')
现在,为了使代码更具可重用性,我想创建一个装饰器,它可以使任何产生打印语句的方法将该打印语句保存为文本文件。
def decorator(obj, method, filename):
def inner(obj, method, filename):
with open(filename, 'w') as f:
with redirect_stdout(f):
obj.method()
return
return inner
@decorator
def save_text(obj, method, filename):
obj.method()
save_text(model, summary, 'summary.txt')
返回的错误是TypeError: decorator() missing 1 required positional argument: 'filename'
。
问题,我敢肯定,我对装饰器的工作方式知之甚少,除了重复函数调用等琐碎的例子。我应该如何更改此代码,以使装饰器正常工作?为什么它认为它缺少位置参数?我不认为这是真的。
解决方案
推荐阅读
- reactjs - 如何使用 react-ga 在 ReactJS 中注册到 Google Adwords 的转换?
- python - 使用多处理池将 python 输出写入文件时遇到问题
- data-structures - 创建和可视化链接列表
- bootstrap-4 - 在引导程序 4 中将表缩小到屏幕大小
- unity3d - Print/Debug.log 在 Unity 控制台中不显示输出
- email - 域和子域之间的电子邮件不起作用
- python - 绘制两个变量然后用第三个变量着色
- python - 如果顺序更改,如何在熊猫中添加值
- ios - 无法使用 mapKit 从 ViewController 将坐标发送到具有委托的另一个 viewController
- javascript - 应用 HOC 后 PropTypes 不可用