正如我们在Python 3中所知print()
是一个函数,是否可以在json.dumps(indent=4)
代表
调用print(mydict)
应该产生与print(json.dumps(mydict, indent=4))
答案 0 :(得分:10)
你本身不需要装饰师。只需定义一个新函数并将其命名为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
,即使在其他对您的恶作剧一无所知的模块中也是如此。但这是一个更糟糕的想法。
答案 1 :(得分:1)
或者,看看pprint。 https://docs.python.org/3/library/pprint.html
答案 2 :(得分:0)
感谢@Adam Smith为此gist,将其发布在此处以供参考。
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)
答案 3 :(得分:-2)
不,这是不可能的,因为print
是内置函数,它甚至不是内置的C级类。 This answer提供了一种将内置对象子类化为str
的方法,并将装饰器应用于其中一种方法。