Ma suggestion est d'utiliser une fonction. Mais plutôt que de mettre le if
dans la fonction, ce que vous pourriez être tenté de faire, faites-le comme ceci :
if verbose:
def verboseprint(*args):
# Print each argument separately so caller doesn't need to
# stuff everything to be printed into a single string
for arg in args:
print arg,
print
else:
verboseprint = lambda *a: None # do-nothing function
(Oui, vous pouvez définir une fonction dans un fichier if
et elle ne sera définie que si la condition est vraie !)
Si vous utilisez Python 3, où print
est déjà une fonction (ou si vous êtes prêt à utiliser la fonction print
comme une fonction dans 2.x en utilisant from __future__ import print_function
), c'est encore plus simple :
verboseprint = print if verbose else lambda *a, **k: None
De cette façon, la fonction est définie comme une fonction qui ne fait rien si le mode verbeux est désactivé (en utilisant une lambda), au lieu de tester constamment la fonction verbose
drapeau.
Si l'utilisateur pouvait changer le mode de verbosité pendant l'exécution de votre programme, ce serait la mauvaise approche (vous auriez besoin de la if
dans la fonction), mais comme vous le définissez avec un drapeau de ligne de commande, vous ne devez prendre la décision qu'une seule fois.
Vous utilisez alors par exemple verboseprint("look at all my verbosity!", object(), 3)
lorsque vous souhaitez imprimer un message "verbeux".
11 votes
Pourquoi ne pas utiliser le module de journalisation et définir le niveau de journalisation INFO par défaut, et DEBUG lorsque --verbose est passé ? Il vaut mieux ne pas réimplémenter quelque chose qui est déjà disponible dans le langage...
3 votes
@Tim, je suis d'accord, mais le module de journalisation est assez pénible.