[Python-es] multiasignación de variables

José Luis Torre Hernández joseluistorrehernandez en gmail.com
Vie Abr 30 11:42:04 CEST 2010


El 30 de abril de 2010 11:15, Pablo Angulo <pablo.angulo en uam.es> escribió:

> Puedes sobreescribir el método __getattribute__ de tu clase:
>
> def__getattribute__(self, name):
>    return xml_none(busqueda_xml ('usuario',name))
>
> Estarías usando los mismos nombres para las variables que para las
> columnas de la tabla. Tal y como te lo cuento, harías demasiadas
> consultas a la base de datos, pero puedes guardar todas las columnas en
> un diccionario (digamos self.variables), y luego lo consultas:
>
> def__getattribute__(self, name):
>    return self.variables[name]
>
> También puedes usar eval, pero en principio no se recomienda.
> Un saludo
> monoBOT escribió:
> >
> > Seguro que existen métidos para la multiasignación de variables, pero
> > yo no lo conozco, bueno en realidad conozco uno:
> >
> > variable1, variable2,variable3, variable4, variable5, variable6 =
> 1,2,3,4,5,6
> >
> > print variable1
> >
> > 1
> >
> > pero éste método es un poco lento para lo que yo necesito… yo tengo en
> > mi programa varios sitios donde hago asignación masiva de variables
> > del tipo
> > variable busca el valor aki1 y aki2
> > … de tal forma que es una lista enorme tal como esta:
> >
> >         self.nombre_fichero = xml_none(busqueda_xml ('usuario',
> 'nombre'))
> >         self.primerapellido_fichero = xml_none(busqueda_xml ('usuario',
> 'primerapellido'))
> >         self.segundoapellido_fichero = xml_none(busqueda_xml ('usuario',
> 'segundoapellido'))
> >         self.dni_fichero = xml_none(busqueda_xml ('usuario', 'dni'))
> >         self.direccion_fichero = xml_none(busqueda_xml ('usuario',
> 'direccion'))
> >         self.codigopostal_fichero = xml_none(busqueda_xml ('usuario',
> 'codigopostal'))
> >         self.poblacion_fichero = xml_none(busqueda_xml ('usuario',
> 'poblacion'))
> >         self.provincia_fichero = busqueda_xml ('usuario', 'provincia')
> > y así hasta 50 variables seguidas
> >
> > lo cual hace bastante feo el código… se me ocurría hacer algo así:
> >
> > lista = (A1, 'A2', 'A3', B1, 'B2', 'B3', ...)
> > for m in range (0,len(lista),3):
> > lista[m] = busqueda (lista[m+1], lista[m+2])
> >
> > pero lo que hace es sustituir el valor de las casillas m por el valor
> > asignado. luego se me ocurrió hacerlo mediante una tupla ya que como
> > el valor es inmutable se podría asignar el valor a la variable.
> > ya que de hecho el ejemplo del principio lo que se hace es darle a la
> > tupla el valor directamente.
> >
> > tupla = (A1, B1, C1, ...)
> > lista = (A2, A3, B2, B3, C2, C3, ...)
> > for m in range (0, len(lista), 2):
> >     tupla[m] = busqueda(lista[m], lista[m+1])
> >
> > éste método tampoco funciona puesto que dice qeu el valor de la tupla
> > es inmutable… me quedé sin ideas.
> >
> >
> > EN DEFINITIVA … alguien me puede aconsejar algún metodo de asignación
> > masiva de variables?? … gracias
> >
> >
> > --
> > monobotblog.alvarezalonso.es <http://monobotblog.alvarezalonso.es>
> > ------------------------------------------------------------------------
> >
> > _______________________________________________
> > Python-es mailing list
> > Python-es en python.org
> > http://mail.python.org/mailman/listinfo/python-es
> > FAQ: http://python-es-faq.wikidot.com/
> >
> >
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>

Tu código funcionaría si la variable de la asignación fuera un elemento de
la lista en lugar de un elemento de la tupla (esta si es inmutable), es
decir que en lugar de:

  tupla[m] = busqueda(lista[m], lista[m+1])

deberías utilizar algo así:

  lista_receptora[m] =   busqueda(lista[m], lista[m+1])

Saludos
José Luis Torre
www.ehu.es
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20100430/f5146838/attachment.html>


Más información sobre la lista de distribución Python-es