众所周知,在Python 3中print()
是一个函数,是否有可能创建一个装饰版本并在json.dumps(indent=4)
下进行包装?
例如:
调用print(mydict)
应该产生与print(json.dumps(mydict, indent=4))
相同的结果。
众所周知,在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
,即使在其他一无所知的模块中也是如此。但这是一个更糟糕的主意。
builtins
模块,这确实是一个非常方便和聪明的解决方案。 - nehem除了BrenBarn的答案(被采纳),这里还要发布由@Adam Smith撰写的另一个代码片段
import builtins
import functools
import json
orig_print = builtins.print
def indent4(f):
@functools.wraps(f)
def wrapped(*args, **kwargs):
return f(json.dumps(*args, **kwargs, indent=4))
return wrapped
@indent4
def print(*args, **kwargs):
return orig_print(*args, **kwargs)