Minha sugestão é usar uma função. Mas em vez de colocar o ifna função, o que você pode ficar tentado a fazer, faça assim:
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
(Sim, você pode definir uma função em uma ifinstrução, e ela só será definida se a condição for verdadeira!)
Se você estiver usando Python 3, onde printjá existe uma função (ou se quiser usar printcomo uma função no uso de 2.x from __future__ import print_function), é ainda mais simples:
verboseprint = print if verbose else lambda *a, **k: None
Dessa forma, a função é definida como não fazer nada se o modo detalhado estiver desativado (usando um lambda), em vez de testar constantemente o verbosesinalizador.
Se o usuário pudesse alterar o modo de verbosidade durante a execução do seu programa, esta seria a abordagem errada (você precisaria do ifna função), mas como você está configurando com um sinalizador de linha de comando, você só precisa tome a decisão uma vez.
Você então usa, por exemplo, verboseprint("look at all my verbosity!", object(), 3)sempre que quiser imprimir uma mensagem "detalhada".