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?
Répondre
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()
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()
.
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 " –
@Daniel Je n'ai pas dit que c'était joli! : D – chrisaycock
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
Si ce que vous voulez savoir est « Comment appeler une fonction lorsque vous avez son nom dans une chaîne », voici quelques bonnes réponses - Calling a function of a module from a string with the function's name in Python
+1 pour rechercher si cette question a déjà répondu ici (quelque chose que l'OP aurait dû faire, à mon humble avis). – martineau
test def(): print « test »
def test2(): print 'test2'
assign_list = [test, test2]
pour i dans assign_list: i()
Oh année .. je vois ,, :), juste un code de test rapide;) – pkdkk
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