вызов списка функций с использованием понимания списка - PullRequest
28 голосов
/ 28 марта 2011

можно ли вызвать список функций и использовать их понимание?

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

fl = [func1,func2,func3]

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

Я знаю, что могу сделать

for f in fl:
   f()

а можно сделать ниже?

[f() for f in fl]

Дополнительный вопрос для тех добрых людей, если мой список функций находится в классе, например

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

это работает?

Ответы [ 4 ]

21 голосов
/ 28 марта 2011
>>> [f() for f in fl]
[1, 2, 3]

Абсолютно:)

15 голосов
/ 29 марта 2011

Конечно, вы можете, как сказал Фабио Диниз :), однако для метода класса, когда он используется как вызываемый, объект должен быть задан в качестве аргумента:

fobj= F()

for f in fobj.fl:
    f(fobj)

Объект должен быть задан какаргумент для вызываемого, потому что когда вы смотрите на определение метода def funcX(self):, метод нуждается в одном аргументе " self "

1 голос
/ 28 марта 2011

Да, вы можете. Результирующий список будет содержать возвращаемые значения ваших функций.

0 голосов
/ 28 марта 2011

Да, вы можете - функции вызываются по назначению.

...