python - 装饰 Python 的内置 print() 函数

标签 python python-decorators

正如我们在 Python 3 中所知,print() 是一个函数,是否可以创建它的装饰版本并包装在 json.dumps(indent=4)

例如

调用 print(mydict) 应该产生与 print(json.dumps(mydict, indent=4)) 相同的结果

最佳答案

您不需要装饰器本身来做到这一点。只需定义一个新函数并将其命名为 print:

import builtins

def print(*args, **kwargs):
    builtins.print(json.dumps(*args, **kwargs, indent=4))

您可以使用如图所示的builtins 模块来访问原始打印功能。

问题在于,除了 print 之外,这样做并不会真正比调用新函数有任何好处,除非它会让人们感到困惑。

如果你想真的迷惑你可以存储 old_print = builtins.print 的人,将你的新函数定义为 my_print(访问原始函数作为 old_print) 然后执行 builtins.print = my_print。然后,您修改后的 print 实际上将替换常规 print,即使在其他对您的恶作剧一无所知的模块中也是如此。但这是一个更糟糕的想法。

关于python - 装饰 Python 的内置 print() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46658639/

相关文章:

python - 提供了断言错误 : The algorithm only supports <class 'gym.spaces.box.Box' > as action spaces but Box(-1. 0, 1.0, (3,), float32)

python - 限制groupby操作

python - 线性模型文本分类中的特征重要性,StandardScaler(with_mean=False) 是或否

python - 向可从自定义基类访问的 celery 函数添加额外属性

python - 让 Python 装饰器与 Hug API 框架配合使用

Python unittest 仅跳过一个子类的测试

python - 装饰器,不带括号调用函数?

python - 创建一个组合两个函数的装饰器,而不指定原始函数的调用签名

python - 如何将未知的参数列表发送给 python 装饰器?

python - 如何使用 Unittest 套件传递变量