如何在python中为所有print()输出设置前缀?

Dav*_*ave 5 python printing formatting

我正在用 python 打印到控制台。我正在寻找一段代码,以便一行代码之后的所有打印语句在开头都有 4 个空格。例如。

print('Computer: Hello world')
print.setStart('    ')
print('receiving...')
print('received!')
print.setStart('')
print('World: Hi!')
Run Code Online (Sandbox Code Playgroud)

输出:

Computer: Hello world
    receiving...
    received!
World: Hi!
Run Code Online (Sandbox Code Playgroud)

这将有助于标记函数中包含的所有输出,以及设置何时标记函数输出。这可能吗?

fou*_*ead 5

您可以定义一个print函数,该函数首先打印您的前缀,然后在内部调用内置print函数。您甚至可以让您的自定义print()函数查看调用堆栈并相应地确定要使用多少个空格作为前缀:

import builtins
import traceback

def print(*objs, **kwargs):
    my_prefix = len(traceback.format_stack())*" "
    builtins.print(my_prefix, *objs, **kwargs)
Run Code Online (Sandbox Code Playgroud)

测试一下:

def func_f():
    print("Printing from func_f")
    func_g()

def func_g():
    print ("Printing from func_g")

func_f()
Run Code Online (Sandbox Code Playgroud)

输出:

                    Printing from func_f
                     Printing from func_g
Run Code Online (Sandbox Code Playgroud)

恢复到内置print()函数:

当您完成自定义打印并想开始使用内置print()函数时,只需使用del“删除”您自己的打印定义即可:

del print
Run Code Online (Sandbox Code Playgroud)


Chr*_*ean 2

为什么不定义自己的自定义函数并在需要时使用它:

def tprint(*args):
    print('    ', *args)
Run Code Online (Sandbox Code Playgroud)

它将像这样使用:

print('Computer: Hello world')
tprint('receiving...')
tprint('received!')
print('World: Hi!')
Run Code Online (Sandbox Code Playgroud)

输出:

Computer: Hello world
     receiving...
     received!
World: Hi!
Run Code Online (Sandbox Code Playgroud)