Mein Vorschlag ist, eine Funktion zu verwenden. Aber anstatt das if
in die Funktion zu setzen, zu der Sie möglicherweise versucht sind, gehen Sie folgendermaßen vor:
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
(Ja, Sie können eine Funktion in einer if
Anweisung definieren, die nur definiert wird, wenn die Bedingung erfüllt ist!)
Wenn Sie Python 3 verwenden, wo print
bereits eine Funktion vorhanden ist (oder wenn Sie bereit sind, sie print
in 2.x als Funktion zu verwenden from __future__ import print_function
), ist dies noch einfacher:
verboseprint = print if verbose else lambda *a, **k: None
Auf diese Weise wird die Funktion als Nichtstun definiert, wenn der ausführliche Modus deaktiviert ist (mit einem Lambda), anstatt das verbose
Flag ständig zu testen .
Wenn der Benutzer den Ausführlichkeitsmodus während der Ausführung Ihres Programms ändern könnte , wäre dies der falsche Ansatz (Sie benötigen den if
in der Funktion), aber da Sie ihn mit einem Befehlszeilenflag setzen, müssen Sie nur Treffen Sie die Entscheidung einmal.
Sie verwenden dann zB verboseprint("look at all my verbosity!", object(), 3)
immer dann, wenn Sie eine "ausführliche" Nachricht drucken möchten.