有没有办法强制Python中的任何函数都不要冗长?

有没有办法强制Python中的任何函数都不要冗长?,python,pytorch,verbosity,Python,Pytorch,Verbosity,在通过Pytork加载预训练模型时 model.load_state_dict(torch.load(MODEL_PATH)) 控制台中充斥着包含模型信息的输出(这很烦人)。如果没有详细选项,无论是在model.load\u state\u dict中还是在torch.load中。如果我忽略了这个参数,请告诉我 然而,这让我想到了一个问题:是否有任何常规方法可以强制函数不冗长。可能是这样的: with os.nonverbose(): model.load_state_dict(torc

在通过Pytork加载预训练模型时

model.load_state_dict(torch.load(MODEL_PATH))
控制台中充斥着包含模型信息的输出(这很烦人)。如果没有详细选项,无论是在
model.load\u state\u dict
中还是在
torch.load
中。如果我忽略了这个参数,请告诉我

然而,这让我想到了一个问题:是否有任何常规方法可以强制函数不冗长。可能是这样的:

with os.nonverbose():
   model.load_state_dict(torch.load(MODEL_PATH))

有什么想法吗?

正如@triplee所评论的,大多数库都会使用Python日志记录,可以对其进行大量修改。我以前没有使用过Pytork,但从它看来,它实际上使用的是
print
(如果可以的话,这很可怕)

但是,通常可以通过重定向stdout来抑制任何内容的stdout输出。这里有一个很好的链接

在您的问题中,您会问是否可以使用上下文管理器来实现这一点。我不明白为什么不这样做,考虑到您希望在函数调用后重置stdout,这似乎是合适的。大概是这样的:

from io import StringIO  # Python3

import sys

class SilencedStdOut:
    def __enter__(self):
        self.old_stdout = sys.stdout
        self.result = StringIO()
        sys.stdout = self.result

    def __exit__(self, *args, **kwargs):     
 
        sys.stdout = self.old_stdout
        result_string = self.result.getvalue() # use if you want or discard.

但是,如果您只想限制一个函数而不想限制一个代码块,那么装饰器也应该可以正常工作。

它不是简单地使用标准的Python
日志记录模块吗?这是一个出色的解决方案,我从来没有想过在Python中覆盖stdout。从标准库中,还有,同样的效果。