Llamar una funcion desde variable

Amm-Python python en ammsoft.com
Mie Dic 22 13:00:46 CET 2004


Aquí tienes un trozo de código, sacado de la demo de wxpython:

buttonDefs = {
    814 : ('PreviewWide',      'Preview print of a wide table'),
    815 : ('PreviewNarrow',   'Preview print of a narrow table with
color highlights'),
    818 : ('OnPreviewMatrix',   'Preview print of a narrow column grid
without a table header'),
    817 : ('PreviewLine',   'Preview print to demonstrate the use of
line breaks'),
    819 : ('PrintWide', 'Direct print (no preview) of a wide table'),
    820 : ('PrintEtiqueta', 'Preview print of a label'),
    }

#-------------------------------------------------------------------
#-Main application--------------------------------------------------
#-------------------------------------------------------------------

class MyPanel(wxPanel):

    def __init__(self, parent):
        wxPanel.__init__(self, parent, -1, wxDefaultPosition,
wxDefaultSize)
        self.parent = parent

        box = wx.BoxSizer(wx.VERTICAL)
        box.Add((20, 30))
        keys = buttonDefs.keys()
        keys.sort()

        for k in keys:
            text = buttonDefs[k][1]
            btn = wx.Button(self, k, text)
            box.Add(btn, 0, wx.ALIGN_CENTER|wx.ALL, 15)
            #self.Bind(wx.EVT_BUTTON, self.OnButton, btn)
            EVT_BUTTON(self, k, self.OnButton)


        self.SetAutoLayout(True)
        self.SetSizer(box)

    def OnButton(self, evt):
        funct = buttonDefs[evt.GetId()][0]
        code = 'self.' + funct + '()'
        eval(code)  #ESTE ES EL TRUCO !!!!!!!!!
......

Creo que es fácil de seguir. Si no entiendes algo te lo explico.

Un saludo,
Toni

P.D.
Aunque no utilices wxPython, es una buena cosa instalarlo y devorar el
código de su "demo", aprenderás un mogollón.



> -----Mensaje original-----
> De: python-es-bounces en aditel.org 
> [mailto:python-es-bounces en aditel.org] En nombre de Oscar Merchan
> Enviado el: dimecres, 22 / desembre / 2004 11:15
> Para: Lista de Python
> Asunto: [Python-es] Llamar una funcion desde variable
> 
> 
> 
> Buenas a todos.
> 
> 
> Ya se que lo voy a preguntar es un poco raro, y ni tan 
> siquiera se si ahi alguna forma de hacerlo. Bueno haya va, 
> quisiera poder ejecutar una funcion a raiz del valor de una 
> variable, me esplico con un ejemplo .-
> 
> 
> 	def imprime():   <-- Fundion
> 	    print 'chorrada' 
> 
> 	prueba = 'imprime'  <-- Variable, cuyo valor es el 
> mismo nombre que la funcion
> 
> 	prueba()  <-- Ya se que esto no funciona pero es para 
> que veais lo que pretendo
> 
> La idea de todo esto es que quiero hacer un programa en el 
> cual yo sepa lo minimo, y que sea el usuario mediante una 
> configuracion el que proporcione todo la informacion, en este 
> caso se trata de procesar unos ficheros de log's, y quiero 
> dar solo la base, y que 
> luego el usuario a raiz de la configuracion que proporcione 
> hacer una cosa u otra pero siempre teniendo el usuario el control.
> 
> Me esplico, imaginar una linea de log en la cual os dice que 
> vuestra maquina se ha apagado, y que quieres saber el tiempo 
> que ha estado encendida, supongamos que la informacion de 
> apagado sea CPU OFF, bien quiero dar al usuario la 
> oportunidad que el me diga que hacer, o sea que si quiere que 
> se sepa el tiempo de encendio que ponga en la configuracion 
> CPU OFF = @encendido ( donde @encendido seria el nombre de la 
> funcion ) o si lo que quiere es CPU OFF = @descartalo
> 
> Basicamente la idea es dejar que el usuario utilice el 
> programa segun le convenga cambiando lo minimo posbile de el, 
> y en mi caso dejarle 
> las funciones definidas y que el segun quiera procesar cada 
> mensaje que le ponga una cosa u otra sin tener que 
> preocuparme yo de cada cambio que quieran hacer.
> 
> 
> 
> Gracias, Oscar Merchan.
> 
> P.D .- Tambien se admite ideas de otras formas de hacerlo :-D
> 




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