llamar una funcion con parametro (completa)

Chema Cortés chemacortes en wanadoo.es
Dom Feb 2 13:34:37 CET 2003


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

El Vie 31 Ene 2003 10:37, Esteban Manchado Velázquez escribió:

>    ¿No se puede hacer más fácilmente con una lambda?
>
>    Si necesitas pasar una función que reciba un parámetro fijo, ¿por qué no
> crear una segunda función que llame a la primera con ese parámetro? Creas
> una función lambda así:
>
>    lambda f x=nro : self.nuevo_renglon(x)

La sintaxis correcta es:

f=lambda x=nro: self.nuevo_renglon(x)

Tan sólo hay que tener cuidado con el valor por defecto, ya que será el valor 
que tenía 'nro' en el preciso momento en que se define la función lambda, 
quedando ya fijado para los usos posteriores. La solución óptima es 
"fabricar" la función siempre que se necesite:

class ...

  def nuevo_reglon(self, nro):
    ...

  def nuevo_reglon_command(self, nro):
    return lambda x=nro: self.nuevo_reglon(x)


  def botonera(self, nro):
    ...
    botones.add('Nuevo',command=self.nuevo_renglon_command(nro))


En cada invocación al método nuevo_renglon_command se "fabricará" una nueva 
función lambda con el valor de 'nro' pasado como argumento.


Saludos,
- -- 
Chema Cortes (chemacortes en wanadoo.es) | LinuxUser#142755 - SuSE Linux 8.1
  ZARALINUX  http://www.zaralinux.org | "La naturaleza es muy sencilla; lo
    PYTANDO  http://pytando.sf.net    |  difícil es razonar con ella."
      PGPKEY: mailto:chemacortes en wanadoo.es?subject=__PGPKEY__

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.7 (GNU/Linux)

iD8DBQE+PRBgHLTQrABk8H0RArYuAJ9p298L5E5zinxfeLUf/vKPF/F46gCeKKhH
owlo4gmBQsJfXAa2Uu+RFO4=
=JfbX
-----END PGP SIGNATURE-----




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