Stef Mientki a écrit : > > If I'm not mistaken, I read somewhere that you can use > function-names/references in lists and/or dictionaries,
Python's functions are objects too - instances of the (builtin) class 'function'. So yes, you can use them like any other object (store them in containers, pass them as arguments, return them from functions etc). > but now I can't > find it anymore. > > The idea is to build a simulator for some kind of micro controller (just > as a general practise, I expect it too be very slow ;-). > > opcodes ={ > 1: ('MOV', function1, ...), > 2: ('ADD', function2, ), > 3: ('MUL', class3.function3, ) > } > > def function1 > # do something complex > > > Is this possible ? Why don't you just try ? def mov(what, where): print "mov() called with %s : %s" % (what, where) def add(what, towhat): print "add() called with %s : %s" % (what, towhat) opcodes = { 1: ('MOV', mov), 2: ('ADD', add), } opcodes[1][1](42, 'somewhere') opcodes[2][1](11, 38) The third example is a bit less straightforward. Unless class3.function3 is a classmethod or staticmethod, you'll need an instance of class3, either before constructing the 'opcodes' dict or when actually doing the call. class SomeClass(object): def some_method(self): print "some_method called, self : %s" % self some_obj = SomeClass() opcodes[3] = ('MUL', some_obj.some_method) opcodes[3][1]() FWIW, using a dict of callables is a common Python idiom to replace the switch statement. HTH -- http://mail.python.org/mailman/listinfo/python-list