In article <[EMAIL PROTECTED]>,
Steve Holden  <[EMAIL PROTECTED]> wrote:
>Cameron Laird wrote:
>> In article <[EMAIL PROTECTED]>,
>> Jan Schilleman <[EMAIL PROTECTED]> wrote:
>>> Hi,
>>>
>>> try this:
>>> func = getattr(operations, ["Replace", "ChangeCase", "Move"][n])
>>>
>>> HTH,
>>> Jan
>>>
>>> "ianaré" <[EMAIL PROTECTED]> schreef in bericht 
>>> news:[EMAIL PROTECTED]
>>>> 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.
                        .
                        .
                        .
Ugh.  Yes.

Maybe your question, "Wouldn't it therefore be less perverse ...?",
was rhetorical.  I feel obliged to answer in public, though, rather
than sending the private e-mail I originally wrote, because I want
to leave no doubt in the minds of readers of this thread:  what I
wrote was wrong.  Yes, Steve's lookup_table binding (or assignment)
was what I had in mind all along, and entirely superior to what I
mistakenly wrote; my thanks to him.  He also elaborated the correct
detail:  "if the integer choice values weren't a linear sequence",
or if they weren't even integers, or ..., then the dictionary
suddenly becomes much more compelling.

Incidentally, a fair amount of Python code that looks like

    if n == 1:
        ...
    elif n == 2:
        ...

turns out, in my experience, to have been inherited from some other
language in such a way that it turns out n is not even the most 
natural or expressive determinant.  A fully idiomatic rewriting will
have a table where the keys are more-humanly-readable strings, rather
than small integers.
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to