过载打印python

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (100)

我能够重载该print函数并从内部调用正常函数吗?我想要做的是在我要print调用的特定行之后print调用普通行print并将副本写入文件。

另外我不知道怎么超载print。我不知道如何做变长参数。我很快就会查看它,但是 重载打印python告诉我,我不能print2.x中超载,这就是我正在使用的。

提问于
用户回答回答于

重载print是python 3.0的一个设计特性,以解决你在python 2.x中缺乏这样做的能力。

但是,您可以覆盖sys.stdout。(例如。)只需将其分配给另一个类似文件的对象即可。

或者,您可以通过unix tee命令管理脚本。python yourscript.py | tee output.txt将打印到stdout和output.txt,但这将捕获所有输出。

用户回答回答于

对于那些审查以前过时的答案的人,从版本发布“Python 2.6”开始,对原始海报的问题有一个新的答案。

在Python 2.6及更高版本中,您可以禁用print语句以支持print函数,然后使用您自己的print函数覆盖print函数:

from __future__ import print_function
# This must be the first statement before other statements.
# You may only put a quoted or triple quoted string, 
# Python comments, other future statements, or blank lines before the __future__ line.

try:
    import __builtin__
except ImportError:
    # Python 3
    import builtins as __builtin__

def print(*args, **kwargs):
    """My custom print() function."""
    # Adding new arguments to the print function signature 
    # is probably a bad idea.
    # Instead consider testing if custom argument keywords
    # are present in kwargs
    __builtin__.print('My overridden print() function!')
    return __builtin__.print(*args, **kwargs)

当然,您需要考虑此打印功能此时仅为模块范围。你可以选择覆盖__builtin__.print,但你需要保存原件__builtin__.print; 可能与__builtin__命名空间混淆。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励