call to function by text variable

Steve Holden steve at holdenweb.com
Mon Mar 26 02:40:16 EDT 2007


Cameron Laird wrote:
> In article <mailman.5604.1174863631.32031.python-list at python.org>,
> Jan Schilleman <jan.schilleman at xs4all.nl> wrote:
>> Hi,
>>
>> try this:
>> func = getattr(operations, ["Replace", "ChangeCase", "Move"][n])
>>
>> HTH,
>> Jan
>>
>> "ianaré" <ianare at gmail.com> schreef in bericht 
>> news:1174862186.134912.117270 at p15g2000hsd.googlegroups.com...
>>> yeah the subject doesn't really make sense does it?
>>>
>>> anyway want I want to do is this:
>>> if n == 1:
>>>
>>>    self.operations.insert(pos, operations.Replace.Panel(self, main))
> 			.
> 			.
> 			.
> I think you meant "...[n - 1]" rather than "...[n]".
> 
> I'm a tiny bit surprised no one has organized this in terms
> of a dictionary.  I don't know, of course, how robust is the
> characterization of n as a small integer.  Maybe
> 
>   lookup_table = {
>       0: "Replace",
>       1: "ChangeCase",
>       2: "Move"}
> 
> captures the sentiment; maybe something else does it better.
> 
Surely for this requirement the *only* advantage of a dictionary over a 
list is its ability to index with arbitrary values and thereby avoid the 
need to use [n-1]. Wouldn't it therefore be less perverse to use

     lookup_table = {
       1: "Replace",
       2: "ChangeCase",
       3: "Move"}

Of course the dictionary would be a big win if the integer choice values 
weren't a linear sequence. Otherwise using a list with a fixed offset is 
likely to be quicker.

regards
  Steve
-- 
Steve Holden       +44 150 684 7255  +1 800 494 3119
Holden Web LLC/Ltd          http://www.holdenweb.com
Skype: holdenweb     http://del.icio.us/steve.holden
Recent Ramblings       http://holdenweb.blogspot.com




More information about the Python-list mailing list