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?
Asked
Active
Viewed 8.8k times
20

pkdkk
- 3,905
- 8
- 44
- 69
-
1possible duplicate of [Calling a function of a module from a string with the function's name in Python](http://stackoverflow.com/questions/3061/calling-a-function-of-a-module-from-a-string-with-the-functions-name-in-python) – cfi Sep 14 '15 at 09:44
4 Answers
39
You could use the actual function objects themselves as keys, rather than the names of the functions. Functions are first class objects in Python, so it's cleaner and more elegant to use them directly rather than their names.
test = {test:'blabla', test2:'blabla2'}
for key, val in test.items():
key()

John Kugelman
- 349,597
- 67
- 533
- 578
7
John has a good solution. Here's another way, using eval()
:
def test():
print 'test'
def test2():
print 'test2'
mydict = {'test':'blabla','test2':'blabla2'}
for key, val in mydict.items():
eval(key+'()')
Note that I changed the name of the dictionary to prevent a clash with the name of the test()
function.

chrisaycock
- 36,470
- 14
- 88
- 125
-
2Oof, not sure why you'd ever use this over the "function objects as keys themselves" method. If anything, you may be introspecting using something like `hasattr`, but never ever `eval` – Daniel DiPaolo Dec 13 '10 at 17:03
-
-
This works, but `eval()` has a lot of overhead to use it just calling a function. There's other better, way more "Pythonic" ways... – martineau Dec 13 '10 at 17:48
-
2... like, for example, looking up the name in `globals()` and/or `locals()` perhaps? :) – Karl Knechtel Dec 13 '10 at 18:41
0
def test():
print 'test'
def test2():
print 'test2'
assign_list=[test,test2]
for i in assign_list:
i()
-2
def test():
print 'test'
def test2():
print 'test2'
func_dict = {
"test":test,
"test2":test2
}
test = {'test':'blabla','test2':'blabla2'}
for key, val in test.items():
func_dict[key]()

Tangy_leprechaun
- 1
- 1