web-dev-qa-db-fra.com

appeler la liste des fonctions en utilisant la compréhension de la liste

puis-je appeler une liste de fonctions et utiliser la compréhension de liste?

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

fl = [func1,func2,func3]

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

Je sais que je peux faire

for f in fl:
   f()

mais puis-je faire ci-dessous?

[f() for f in fl]

Une question supplémentaire pour ces gens gentils, si ma liste de fonctions est en classe, par exemple

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()

est-ce que ça marche?

28
Jerry Gao

Bien sûr, vous pouvez, comme l'a dit Fábio Diniz :), Cependant pour la méthode de classe lorsqu'elle est utilisée comme appelable, un objet doit être donné comme argument:

fobj= F()

for f in fobj.fl:
    f(fobj)

L'objet doit être donné comme argument à l'appelable car lorsque vous regardez la définition de la méthode def funcX(self): la méthode a besoin d'un argument "self"

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

Absolument :)

21
Mike Lewis

Oui, vous pouvez. La liste résultante contiendra les valeurs de retour de vos fonctions.

1
nmichaels

Oui, vous pouvez - les fonctions sont appelées comme prévu.

0
Alexander Gessler