Paso de una funcion como parametro

Ernesto Revilla aerd en retemail.es
Jue Sep 12 13:44:48 CEST 2002


Después de la contestación de Hernan,

si siempre quieres proporcionar los parámetros, usa un diccionario (como él
ha comentado). Puedes pasar estas funciones a otras funciones como quieras.
No debes incluir los paréntesis, ya que eso realiza la llamada:

def saluda(nombre):
   print "Hola %s" % nombre

def otrafuncion(funcion, parametro):
   print "Soy funcion y ejecuto otra funcion"
   funcion(parametro)

f=saluda

otrafuncion(f,"Pepe")

Claramente, la función saluda es asignada a la variable f y es pasada a la
función otrafuncion.

Si en algun caso quieres fijar determinados valores de los parametros,
entonces tendrás que usar funciones auxiliares o expresiones lambda:

# una simple clase
class Persona:
    def __init__(self,nombre):
        self.nombre=nombre

# una función con un simple saluda
def saluda(quien, aquien=""):
    print "Hola %s, soy %s." % (aquien,quien)

# construir función auxiliar en forma expresión lambda. Tb puedes crearla
con 'def ...'
# para evitar el primer parámetro, ya que lo tendrá que coger del objeto
pasado por parámetro.
f=lambda self,aquien="": saluda(self.nombre, aquien)

# ahora se lo ponemos a la clase:
Persona.saluda=f

x=Persona("Paco")
x.saluda()                    # da: 'Hola , soy Paco.'
x.saluda("Pepe")          # da: 'Hola Pepe, soy Paco.'

Si en algún caso quieres definir la función dinámicamente, crea una cadena
de caracteres y pásaselo a la función eval como en este ejemplo:
textofuncion="lambda "+"self,aquien=''"+": "+saluda(self.nombre, aquien)"
f=eval(textofuncion)

Saludos cordiales,
Erny


----- Original Message -----
From: "Attila Saorin" <mostroratas en yahoo.es>
To: "Lista de Pyhton" <python-es en aditel.org>
Sent: Thursday, September 12, 2002 11:16 AM
Subject: [Python-es] Paso de una funcion como parametro


> Buenas a todos,
>
> Imaginaos que tenemos un monton de funciones de edicion, en plan:
>
> "Comentar_Las_Lineas_Que_Empiezan_Por"
> "Comentar_N_Lineas"
> "Comentar_Linea_Que_Coincida_Con"
> .....
>
> y asi, montones de definiciones de funciones muy tontas, yo quisiera saber
si hay alguna forma de
> ahorrarme o en cierto modo, programar estas o nuevas funcionalidades
directamente pasandolas como
> parametro y asi quitarme todo ese codigo repetitivo de encima, asi, cuando
necesite una, paso la
> funcion que quiero como parametro para mi edicion y ya me lo hace, es algo
muy sutil (como dice mi
> profe), poner el propio codigo en python sobre mi fichero de configuracion
y asi ir aniadiondole
> mas y mas posibilidades a mi antojo.
>
> espero que haya quedado claro mi duda, si no, un ejemplito en pseudocodigo
d elo que quisiera
> hacer:
>
> pcfengine.add_Action(Edit(file_name =
'/home/attila/a.txt',[Edit.Call(my_function)])
>
> no se si podria escribir directamente el codigo dentro de eso (aunque me
parece que seria muy
> largo), esa funcion que paso como parametro deberia estar en ese fichero,
asi que imagino que mi
> modulo edit deberia importar ese codigo o algo (que no se como se puede
hacer) :(
>
> Bueno, a ver si hay suerte :)
>
> Gracias de antemano.
>
> Attila
>
> _______________________________________________________________
> Yahoo! Messenger
> Nueva versión: Webcam, voz, y mucho más ¡Gratis!
> Descárgalo ya desde http://messenger.yahoo.es
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo.py/python-es






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