ASPN ActiveState Programmer Network
ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups


Recent Messages
List Archives
About the List
List Leaders
Subscription Options

View Subscriptions
Help

View by Topic
ActiveState
.NET Framework
Open Source
Perl
PHP
Python
Tcl
Web Services
XML & XSLT

View by Category
Database
General
SOAP
System Administration
Tools
User Interfaces
Web Programming
XML Programming


MyASPN >> Mail Archive >> python-list
python-list
Re: list/dictionary as case statement ?
by Bruno Desthuilliers other posts by this author
Jan 2 2007 2:50PM messages near this date
list/dictionary as case statement ? | Re: list/dictionary as case statement ?
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
Thread:
Stef Mientki
Bruno Desthuilliers
Bjoern Schliessmann
Tom Plunket
Stef Mientki
Bjoern Schliessmann
Mrab
Tom Plunket
Hendrik van Rooyen
Gary Herron
Stef Mientki
Grant Edwards

Privacy Policy | Email Opt-out | Feedback | Syndication
© ActiveState Software Inc. All rights reserved