Como saber si un parametro es una secuencia
Antonio Castro
acastro en ciberdroide.com
Jue Dic 16 17:21:57 CET 2004
On Thu, 16 Dec 2004, Chema Cortés wrote:
> El Jueves, 16 de Diciembre de 2004 11:24, Pablo Rey Sobral escribió:
> > On Thu, 16 Dec 2004 10:49:30 +0100, Andres Moya
> >
> > <Andres.Moya en hispalinux.es> wrote:
> > > Hola a todo el mundo.
> > >
> > > Esto lo he visto resuelto alguna vez, pero ahora no soy capaz de
> > > encontrarlo. ¿Cuál es la mejor manera de saber si una variable contiene
> > > una secuencia o un valor escalar? O sea, saber si tengo que iterar sobre
> > > ella o simplemente coger su valor.
> >
> > La mejor es preguntar de que tipo es la variable:
> > >>> x = 2
> > >>> type (x)
> >
> > <type 'int'>
> >
> > >>> x = [2]
> > >>> type (x)
> >
> > <type 'list'>
> >
> > >>> x = (2,)
> > >>> type (x)
> >
> > <type 'tuple'>
> >
> > >>> x = {'2':2}
> > >>> type (x)
> >
> > <type 'dict'>
> >
> > para saber si la tienes que iterar
> >
> > if (type(x) == list) or (type(x) == (tuple) or type(x) == dict):
>
> No es ésta la mejor forma de comprobar el tipo, ya que fallaría si el tipo de
> 'x' fuera un tipo derivado de estas clases. Para comprobar tipos hay que
> utilizar siempre 'issubclass':
>
> if issubclass(x, (list, tuple, dict) ):
> ...
Yo creo que pregurtar por el tipo es una mala solución. Siempre se puede
olvidar alguno. En este caso 'string'. :-)
Aunque no se olvide ninguno depende demasiado de la implementación actual
del lenguaje.
En realidad yo creo que es una pregunta con trampa.
No creo que sea correcto decir que el contenido de una variable sea o no una
secuencia. Me parece más correcto plantearlo en términos de si un determinado
identificador esta asociando o no a algún dado secuenciable. Los datos
secuenciables creo que son los únicos que admiten la función len().
Por lo tanto yo creo que podría servir una funcion tal que.
def Secuenciable(dat):
try:
return len(dat)
except:
return -1
--
Un saludo
Antonio Castro
/\ /\
\\W//
_|0 0|_
+-oOOO-(___o___)-OOOo---------------------+
| . . . . U U . Antonio Castro Snurmacher |
| . . . . . . . acastro en ciberdroide.com |
+()()()---------()()()--------------------+
Más información sobre la lista de distribución Python-es