2011-03-28 32 views
22

我可以調用函數列表並使用列表理解嗎?使用列表理解的函數調用列表

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

工作的呢?

+9

什麼阻止了您在交互模式下嘗試它? – MAK 2011-03-28 15:49:45

+1

剛剛走了,它確實有效,當我想這個問題時我沒有python shell ... – 2011-03-28 16:26:34

+0

http://docs.python.org/release/3.2/tutorial/datastructures.html#list-理解 – 2011-03-28 18:50:52

回答

14

當然,你可以爲法比奧·迪尼茲說:), 然而,對於作爲可調用時使用類方法,對象必須作爲一個參數:

fobj= F() 

for f in fobj.fl: 
    f(fobj) 

的對象必須作爲一個可調用的參數,因爲當您看到方法def funcX(self):的定義時,該方法需要一個參數「self

+0

謝謝,這是有幫助的。 – 2011-03-29 09:49:54

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

絕對:)

0

是的,你可以 - 功能得到如預期調用。

1

是的,你可以。結果列表將保存函數的返回值。