[Python-es] Estructura para una tabla?

Chema Cortés chemacortes en wanadoo.es
Dom Jun 2 22:23:33 CEST 2002


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

- -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

El Sáb 01 Jun 2002 13:50, Miquel Llover escribió:

> Buenas! Me lo he estado mirando y me han asaltado algunas dudas...
>
> At 12:10 29/05/02, you wrote:
> >Hay que trabajar un poco más para hacer que se pueda cambiar la columna
> >por la que se ordena. Como sugerencia, se puede partir desde aquí:
> >
> >class Pedido:
> >    def __init__(self,nc,pieza,cant,fecha):
> >       self.pedido={
> >          "nc":nc, "pieza":pieza, "cant":cant, "fecha":fecha
> >       }
> >
> >    def compara(column):
> >       return lambda a,b,column=column:
> > cmp(a.pedido[column],b.pedido[column])
>
> Aqui me da un error: "AttributeError: pedido". De dónde salen a y b? No
> deberian estar como parámetros de la función compara? He mirado el formato
> de las lambda-expresiones en "Dive Into Python", y las funciones del tipo
> "g = lambda x: x*2" las entiendo, pero no lo identifico con el formato de
> esta lambda-expresion.

Una función lambda se define de igual manera que una función normal, sólo se 
diferencia en que no tiene nombre y que consiste en una única expresión. El 
método anterior lo podría haber definido así:

  def compara(column):
    def compFunc(a,b,column=column):
      return cmp(a.pedido[column],b.pedido[column])
    return compFunc

Este método 'compara' "construye" una función de argumentos 'a' y 'b' (e 
implícitamente 'column'). Esta función se pasa como argumento a la función 
"sort" de la lista de pedidos para hacer la ordenación. Es aquí, en el sort, 
donde a 'a' y 'b' se le da los valores de los dos elementos de la lista que 
queremos comparar.

No tengo ni idea de porqué te da error. Te envío el código completo, del que 
te puedo asegurar que funciona bien en python 2.2

> >    compara=staticmethod(compara)
>
> Qué significa "método estático"?

En programación orientada a objetos (POO) es un método cuyo enlace se resuelve 
en tiempo de compilación ("early binding"), en contraposición a los métodos 
dinámicos ("late binding") que se resuelven durante la ejecución.

Esta definición no tiene mucho sentido en python. Para entendernos mejor 
podemos decir que un método estático es "un método cuya definición no depende 
directamente ni de la clase ni de los objetos que ésta instancie". Podría 
haber ido tranquilamente fuera de la clase como una función más.


Saludos,
- - --
Chema Cortes (chemacortes en wanadoo.es) | LinuxUser#142755 - SuSE Linux 8.0
  ZARALINUX  http://www.zaralinux.org | "La ignorancia se apodera de quien
    PYTANDO  http://pytando.sf.net    |     se contenta con lo que sabe"
      PGPKEY: mailto:chemacortes en wanadoo.es?subject=__PGPKEY__

- -----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org

iD8DBQE8+n2iHLTQrABk8H0RAiQpAKCRoLcKDJTAR8+No10xyLSK78zFxwCg+Ex7
mYeZucNyhC2t4vA1H+a9LEQ=
=bKVx
- -----END PGP SIGNATURE-----

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org

iD8DBQE8+n7FHLTQrABk8H0RAk/8AKCSfd9pJAxTjGUFI7fhShsgU7VvqwCfWNuD
b66KOnGehWeTpL4jkBQHWow=
=Kg3Q
-----END PGP SIGNATURE-----
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: pedido.py
Type: text/x-python
Size: 1497 bytes
Desc: no disponible
URL: <http://mail.python.org/pipermail/python-es/attachments/20020602/0ebc799d/attachment.py>


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