Pour générer des noms de fonctions dynamiquement, nous pouvons utiliser l'incroyable fonction getattr, voici un exemple basique :

In [1]: toto = "test"
In [2]: getattr(toto, "split")('e')
Out[2]: ['t', 'st']

On a “appelé” la méthode split associée à un string par son “nom”. Voici un autre exemple interactif :

>>> def prout(bla):
...     print bla
... 
>>> from sys import modules
>>> moimeme = modules["__main__"]
>>> print moimeme
<IPython.FakeModule instance>

Ici nous créons une fonction basique puis nous definissons un “faux” objet qui est la représentation de main

>>> getattr(moimeme, "pr" + "out")("beau")
beau

Puis en utilisant cette fausse instance, nous construisons un nom de fonction en additionnant deux chaines de caractères dont le résultat est le nom de la fonction précedemment définie: l'appel via getattr() renvoie bien le résultat voulu.

codaz/python/construction_dynamique_de_fonctions.txt · Last modified: 2010/01/12 13:29 (external edit)