J'imprime sur une console en python. Je recherche un morceau de code unique pour que toutes les déclarations imprimées après une ligne de code aient 4 espaces au début. Ex. les fonctions de sortie sont tabulées. Est-ce possible?
3 Réponses :
Pourquoi ne pas définir votre propre fonction personnalisée et l'utiliser si nécessaire:
Computer: Hello world receiving... received! World: Hi!
Elle serait utilisée comme ceci:
print('Computer: Hello world') tprint('receiving...') tprint('received!') print('World: Hi!')
Sortie :
def tprint(*args): print(' ', *args)
Vous pouvez définir une fonction print
qui imprime d'abord votre préfixe, puis appelle en interne la fonction print
intégrée. Vous pouvez même créer votre fonction personnalisée print ()
pour regarder la pile d'appels et déterminer en conséquence le nombre d'espaces à utiliser comme préfixe:
del print
Testez-le:
Printing from func_f Printing from func_g
Sortie:
def func_f(): print("Printing from func_f") func_g() def func_g(): print ("Printing from func_g") func_f()
Revenir à la fonction intégrée print ()
:
Lorsque vous avez terminé votre impression personnalisée, et souhaitez commencer à utiliser la fonction intégrée print ()
, utilisez simplement del
pour "supprimer" votre propre définition de l'impression:
import builtins import traceback def print(*objs, **kwargs): my_prefix = len(traceback.format_stack())*" " builtins.print(my_prefix, *objs, **kwargs)
Vous voudrez peut-être utiliser des préfixes spécifiques uniquement à des endroits spécifiques
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
L'avantage est que c'est une fonction utilitaire, c'est-à-dire qu'il suffit d'importer pour l'utiliser, sans avoir à redéfinir à chaque fois vous écrivez un nouveau script.