2012-08-22 26 views
8

मैं एक जनरेटर इस तरह परिभाषित किया है:लेखन त्रुटि: 'जनरेटर' ऑब्जेक्ट प्रतिदेय नहीं है

def lengths(x): 
    for k, v in x.items(): 
     yield v['time_length'] 

और यह काम करता है

for i in lengths(x): 
    print i 

के साथ बुला पैदा करता है:

3600 
1200 
3600 
300 

जो सही संख्या हैं।

हालांकि

, जब मैं यह इतना की तरह फोन:

somefun(lengths(x)) 

जहां somefun() परिभाषित किया गया है के रूप में:

def somefun(lengths): 
    for length in lengths(): # <--- ERROR HERE 
     if not is_blahblah(length): return False 

मैं इस त्रुटि संदेश मिलता है:

TypeError: 'generator' object is not callable 

मैं क्या गलत समझ रहा हूँ ?

उत्तर

13

आपको अपने जनरेटर को कॉल करने की आवश्यकता नहीं है, () ब्रैकेट हटाएं।

आप शायद इस तथ्य से उलझन में हैं कि आप जेनरेटर के नाम के रूप में फ़ंक्शन के अंदर चर के लिए समान नाम का उपयोग करते हैं; निम्नलिखित भी काम करेगा:

def somefun(lengen): 
    for length in lengen: 
     if not is_blahblah(length): return False 

एक पैरामीटर somefun कार्य करने के लिए पारित कर दिया तो lengths के बजाय स्थानीय lengen चर के लिए बाध्य है, यह स्पष्ट करने के लिए है कि यह है कि स्थानीय चर lengths() समारोह के रूप में एक ही बात नहीं है आप कहीं और परिभाषित किया गया।

+0

वह सरल हुह ... :- डी –

+0

@AmigableClarkKant, पहले स्थान पर कोष्ठक रखने के लिए तर्क क्या था? – unkulunkulu

+0

@unkulunkulu: शायद जनरेटर उत्पन्न करने वाले फ़ंक्शन नाम के साथ भ्रम। –

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