At Saturday 7/10/2006 02:15, MonkeeSage wrote:

On Oct 6, 8:23 pm, Gabriel Genellina <[EMAIL PROTECTED]> wrote:
> if 2 in [1,2,3]: print "Use the same (in) operator"
> elif 'E' in ('E','r','i','k'): print "Works for any sequence"
> elif 'o' in 'hello': print "Even strings"

This isn't really analogous is it? For "somedict.has_key(k)" or "k in
somedict", you don't need to know the value of somedict[k] ahead of
time. So you can avoid KeyError by asking if the key exists first
before trying to get the value.

The meaning comes from the most common usage. For a list, you want to know if an object is contained in the list (not if an index is in range!). For a dictionary, you usually want to know if it maps anything to a given key (not if any key maps to that value!). These are the most common operations, and that's why they have the simple sintax "a in b". [BTW, usage of operator "in" as "key in dict" is rather new to Python; has_key() were the only way to test for key existence some time ago].

Wouldn't that be more like this for
lists (and other sequences):

def has_index(seq, index):
  try:
    seq[index]
    return True
  except IndexError:
    return False

I've often wondered why there is no built-in method like that for
sequence objects.

Because it's not needed at all: valid sequence indexes are *exactly* range(len(seq)). This is the basic point of being a sequence: when indexes are not contiguous, in fact you have a mapping, not a sequence.

And also why not the equivalent of dict.get for other
sequences:

def get(seq, index, default=None):
  if has_index(seq, index):
    return seq[index]
  else:
    return default

Seems useful...

Sometimes, maybe... But since you can write it efficientely in a few lines when needed, I don't see the need to put it into the core language.


--
Gabriel Genellina
Softlab SRL

        
        
                
__________________________________________________
Preguntá. Respondé. Descubrí.
Todo lo que querías saber, y lo que ni imaginabas,
está en Yahoo! Respuestas (Beta).
¡Probalo ya! http://www.yahoo.com.ar/respuestas

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to