2010-12-13 12 views
5
def test(): 
    print 'test' 

def test2(): 
    print 'test2' 

test = {'test':'blabla','test2':'blabla2'} 
for key, val in test.items(): 
    key() # Here i want to call the function with the key name, how can i do so? 
+0

Oh année .. je vois ,, :), juste un code de test rapide;) – pkdkk

+1

duplication possible de [Appel d'une fonction d'un module d'une chaîne avec le nom de la fonction en Python] (http://stackoverflow.com/ questions/3061/call-a-function-of-a-module-from-a-string-with-the-functions-name-in-python) – cfi

Répondre

16

Vous pouvez utiliser les objets de fonction eux-mêmes comme des clés plutôt que comme les noms des fonctions. Les fonctions sont des objets de première classe en Python, il est donc plus propre et plus élégant de les utiliser directement plutôt que leurs noms.

test = {test:'blabla', test2:'blabla2'} 

for key, val in test.items(): 
    key() 
+1

Tu m'as battu dessus. – delnan

+0

J'importe un dict comme: test = {'test': 'blabla', 'test2': 'blabla2'} en ce moment, les fonctions ne sont pas créées .. – pkdkk

1

John a une bonne solution. Voici une autre façon, en utilisant eval():

def test(): 
     print 'test' 

def test2(): 
     print 'test2' 

mydict = {'test':'blabla','test2':'blabla2'} 
for key, val in mydict.items(): 
     eval(key+'()') 

Notez que j'ai changé le nom du dictionnaire pour éviter un affrontement avec le nom de la fonction test().

+0

Oof, je ne sais pas pourquoi vous utiliseriez cela plus de la méthode "objets de fonction en tant que clés elles-mêmes". Si quelque chose, vous pouvez être introspection en utilisant quelque chose comme 'hasattr', mais jamais" eval " –

+0

@Daniel Je n'ai pas dit que c'était joli! : D – chrisaycock

+0

Cela fonctionne, mais 'eval()' a beaucoup de surcharge pour l'utiliser en appelant simplement une fonction. Il y a d'autres façons, bien plus "pythoniques" ... – martineau

0

test def(): print « test »

def test2(): print 'test2'

assign_list = [test, test2]

pour i dans assign_list: i()

+0

dans assign_list test, test2 donner à la manière directe i.e [test, test2] – Surya

+0

ne pas asser comme ça ["test", test2] – Surya

+0

pour i dans assign_list: cette ligne suivante i() – Surya

Questions connexes