Differences

This shows you the differences between two versions of the page.

Link to this comparison view

codaz:python:construction_dynamique_de_fonctions [2010/01/12 13:29] (current)
Line 1: Line 1:
 +Pour générer des noms de fonctions dynamiquement,​ nous pouvons utiliser l'​incroyable fonction //​getattr//,​ voici un exemple basique : 
 +<​code>​ 
 +In [1]: toto = "​test"​ 
 +In [2]: getattr(toto,​ "​split"​)('​e'​) 
 +Out[2]: ['​t',​ '​st'​] 
 +</​code>​ 
 +On a "​appelé"​ la méthode //split// associée à un string par son "​nom"​. 
 +Voici un autre exemple interactif : 
 +<​code>​ 
 +>>>​ def prout(bla):​ 
 +...     print bla 
 +...  
 +>>>​ from sys import modules 
 +>>>​ moimeme = modules["​__main__"​] 
 +>>>​ print moimeme 
 +<​IPython.FakeModule instance>​ 
 +</​code>​ 
 +Ici nous créons une fonction basique puis nous definissons un "​faux"​ objet qui est la représentation de //main// 
 +<​code>​ 
 +>>>​ getattr(moimeme,​ "​pr"​ + "​out"​)("​beau"​) 
 +beau 
 +</​code>​ 
 +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)