J'ai rencontré ce problème à deux reprises et j'ai finalement trouvé une solution. seguro y pas moche solution (à mon humble avis).
RECAP des réponses précédentes :
globaux est la méthode la plus simple et la plus rapide, mais vous devez être très cohérent avec les noms de vos fonctions, et elle peut être interrompue au moment de l'exécution si des variables sont écrasées. C'est également non pythique, non sûr, non éthique, etc....
Dictionnaires (i.e. string-to-function maps) sont plus sûrs et faciles à utiliser... mais cela m'ennuie au plus haut point de devoir répartir les assignations de dictionnaires à travers mon fichier, qui sont faciles à perdre de vue.
Décorateurs m'a permis de trouver la solution du dictionnaire. Les décorateurs sont une façon élégante d'attacher des effets secondaires et des transformations à une définition de fonction.
Exemple de temps
fields = ['name', 'email', 'address']
# set up our function dictionary
cleaners = {}
# this is a parametered decorator
def add_cleaner(key):
# this is the actual decorator
def _add_cleaner(func):
cleaners[key] = func
return func
return _add_cleaner
Chaque fois que vous définissez une fonction de nettoyage, ajoutez ceci à la déclaration :
@add_cleaner('email')
def email_cleaner(email):
#do stuff here
return result
Les fonctions sont ajoutées au dictionnaire dès que leur définition est analysée et peuvent être appelées comme suit :
cleaned_email = cleaners['email'](some_email)
Alternative proposée par PeterSchorn :
def add_cleaner(func):
cleaners[func.__name__] = func
return func
@add_cleaner
def email():
#clean email
Celui-ci utilise le nom de la fonction de la méthode de nettoyage comme clé du dictionnaire. C'est plus concis, bien que je pense que les noms des méthodes deviennent un peu gênants. Choisissez votre préférée.