2011-03-28 19 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

+1

बस जाना था, यह काम करता है, जब मुझे लगता था कि मेरे पास पाइथन खोल नहीं था ... –

+0

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

उत्तर

14
बेशक

आप के रूप में Fábio दिमिज़ कहा जा सकता है :), लेकिन जब एक प्रतिदेय के रूप में इस्तेमाल वर्ग विधि के लिए, एक वस्तु एक तर्क के रूप दिया जाना चाहिए:

fobj= F() 

for f in fobj.fl: 
    f(fobj) 

वस्तु एक के रूप में दिया जाना चाहिए कॉल करने योग्य के लिए तर्क क्योंकि जब आप विधि def funcX(self): की परिभाषा को देखते हैं तो विधि को एक तर्क की आवश्यकता होती है "स्वयं"

+0

धन्यवाद, यह सहायक रहा है। –

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

बिल्कुल :)

0

हाँ, आप कर सकते हैं - कार्यों के रूप में इरादा कहा जाता है मिलता है।

1

हाँ, आप कर सकते हैं। परिणामस्वरूप सूची आपके कार्यों के वापसी मान रखेगी।

संबंधित मुद्दे