Quelque chose comme ça?
def multicall(*functions):
def call_functions(*args, **kwds):
for function in functions:
function(*args, **kwds)
return call_functions
Et si vous voulez agréger les résultats:
ont été suggérées
def multicall(*functions):
def call_functions(*args, **kwds):
return [function(*args, **kwds) for function in functions]
return call_functions
EDIT
Décorateurs; dans ce cas, il ressemblerait à ceci:
def appendcalls(*functions):
def decorator(decorated_function):
all_functions = [decorated_function] + list(functions)
def call_functions(*args, **kwds):
for function in all_functions:
function(*args, **kwds)
return call_functions
return decorator
LOG = logging.getLogger(__name__)
@appendcalls(LOG.info)
def info(fmt, *args):
print fmt % args
info('Hello %s', 'guido')
appendcalls()
prend un certain nombre de fonctions à appeler après la fonction décorée. Vous voudrez peut-être implémenter le décorateur différemment, en fonction de la valeur de retour que vous voulez - l'original de la fonction décorée, une liste de tous les résultats de la fonction ou rien du tout.
Pourquoi je fais cela? Parce que j'ai écrit un module séparé (appelez-le 'ui.py') qui écrit sur la console .. et utilise également la journalisation pour enregistrer les choses. Souvent, le message à imprimer sur la console est également enregistré. –
Vous pouvez configurer le module de journalisation pour ce faire. Utilisez simplement plusieurs gestionnaires et/ou enregistreurs avec les niveaux correspondants. –
Le module de journalisation n'est pas conçu pour une interface utilisateur textuelle .. interagissant avec l'utilisateur. Ex: write_to_terminal peut interagir avec une barre de progression déjà affichée et même la cacher (juste bzr) –