2011-03-28 5 views
22

¿puedo llamar a una lista de funciones y utilizar la lista de comprensión?lista de llamadas de la función usando la lista de comprensión

def func1():return 1 
def func2():return 2 
def func3():return 3 

fl = [func1,func2,func3] 

fl[0]() 
fl[1]() 
fl[2]() 

Yo sé que puedo hacer

for f in fl: 
    f() 

pero puedo hacer a continuación?

[f() for f in fl] 

Una cuestión adicional para aquellas personas amables, si mi lista de funciones está en la clase, por ejemplo

class F: 

    def __init__(self): 
     self.a, self.b, self.c = 0,0,0 

    def func1(self): 
     self.a += 1 

    def func2(self): 
     self.b += 1 

    def func3(self): 
     self.c += 1 

    fl = [func1,func2,func3] 

fobj= F() 

for f in fobj.fl: 
    f() 

Cómo funciona?

+9

¿Qué le impide probar en modo interactivo? – MAK

+1

acaba de ir, funciona, no tuve el shell Python cuando me pareció que la pregunta ... –

+0

http://docs.python.org/release/3.2/tutorial/datastructures.html#list- comprensiones –

Respuesta

14

Por supuesto que puede Fabio Diniz dicho :), Sin embargo, para el método de la clase cuando se usa como exigible, un objeto debe ser dado como argumento:

fobj= F() 

for f in fobj.fl: 
    f(fobj) 

El objeto debe darse como una argumento al invocable porque cuando mira la definición del método def funcX(self): el método necesita un argumento "self"

+0

gracias, ha sido útil. –

15
>>> [f() for f in fl] 
[1, 2, 3] 

Absolutamente :)

0

sí, se puede - las funciones serán llamadas según lo previsto.

1

Sí, puedes. La lista resultante contendrá los valores devueltos de sus funciones.

Cuestiones relacionadas