我正在使用python打印到控制台。我正在寻找一段一次性的代码,以便一行代码之后的所有打印语句在开始时都具有4个空格。例如
print('Computer: Hello world')
print.setStart(' ')
print('receiving...')
print('received!')
print.setStart('')
print('World: Hi!')
输出:
Computer: Hello world
receiving...
received!
World: Hi!
这将有助于制表功能中包含的所有输出,以及设置制表功能输出时的制表符。这可能吗?
答案 0 :(得分:2)
您可以定义一个print
函数,该函数首先打印您的前缀,然后在内部调用内置的print
函数。您甚至可以使自定义print()
函数查看调用栈,并据此确定要用作前缀的空间:
import builtins
import traceback
def print(*objs, **kwargs):
my_prefix = len(traceback.format_stack())*" "
builtins.print(my_prefix, *objs, **kwargs)
进行测试:
def func_f():
print("Printing from func_f")
func_g()
def func_g():
print ("Printing from func_g")
func_f()
输出:
Printing from func_f Printing from func_g
恢复到内置的print()
功能:
完成自定义打印后,想要开始使用内置的print()
函数,只需使用del
来“删除”您自己的打印定义:
del print
答案 1 :(得分:1)
为什么不定义自己的自定义函数,并在需要时使用它:
def tprint(*args):
print(' ', *args)
它的用法如下:
print('Computer: Hello world')
tprint('receiving...')
tprint('received!')
print('World: Hi!')
输出:
Computer: Hello world
receiving...
received!
World: Hi!
答案 2 :(得分:0)
您可能只想在特定位置使用特定前缀
import sys
from contextlib import contextmanager
@contextmanager
def add_prefix(prefix):
global is_new_line
orig_write = sys.stdout.write
is_new_line = True
def new_write(*args, **kwargs):
global is_new_line
if args[0] == "\n":
is_new_line = True
elif is_new_line:
orig_write("[" + str(prefix) + "]: ")
is_new_line = False
orig_write(*args, **kwargs)
sys.stdout.write = new_write
yield
sys.stdout.write = orig_write
with add_prefix("Computer 1"):
print("Do something", "cool")
print("Do more stuffs")
with add_prefix("Computer 2"):
print("Do further stuffs")
print("Done")
#[Computer 1]: Do something cool
#[Computer 1]: Do more stuffs
#[Computer 2]: Do further stuffs
#Done
优点是它是一个实用程序函数,即您只需导入即可使用它,而不必在每次编写新脚本时都重新定义。