2012-03-19 11 views
24

मैं मेरे लाइन बताता है 1 और लाइन 5 (डिबगिंग/प्रोग्रामिंग करने के लिए नया, यकीन नहीं करता है, तो यह है कि मदद करता है)अजगर NoneType वस्तु

def hi():  
    print 'hi' 

def loop(f, n):   #f repeats n times 
    if n<=0: 
     return 
    else: 
     f()    
     loop(f, n-1)  

loop(hi(), 5) 
hi 
TypeError: 'NoneType' object is not callable 

क्यों यह मुझे उस त्रुटि देता है (शुरुआत) प्रतिदेय नहीं है?

उत्तर

36

आप अपने loop() समारोह, नहीं hi() करने के लिए एक कॉल का परिणाम (जो Nonehi() के बाद से कुछ भी वापस नहीं करता है) करने के लिए समारोह वस्तुhi पास करना चाहते हैं।

तो यह प्रयास करें:

>>> print hi() 
hi 
None 
>>> print hi 
<function hi at 0x0000000002422648> 
+1

ओह मैं देख रहा हूँ, बहुत बहुत शुक्रिया – Foxic

+2

आपका स्वागत है। साथ ही, आप अपने फंक्शन 'रिकर्स' या कुछ ऐसा ही कॉल करना चाहते हैं क्योंकि यह वास्तव में लूप नहीं है ... –

+1

@ 30trix: अगर आपकी समस्या हल हो जाती है तो जवाब स्वीकार करना याद रखें। Stackoverflow में आपका स्वागत है। :) – Mizipzor

2

क्यों यह मुझे उस त्रुटि देता है:

>>> loop(hi, 5) 
hi 
hi 
hi 
hi 
hi 

शायद यह आप बेहतर ढंग से समझने में मदद मिलेगी?

क्योंकि आपके पहले पैरामीटर आप loop कार्य करने के लिए पारित None है, लेकिन अपने कार्य एक प्रतिदेय वस्तु है, जो None वस्तु नहीं है उम्मीद कर रही है।

इसलिए आपको कॉल करने योग्य-ऑब्जेक्ट को पास करना होगा जो आपके मामले में hi फ़ंक्शन ऑब्जेक्ट है।

def hi():  
    print 'hi' 

def loop(f, n):   #f repeats n times 
    if n<=0: 
    return 
    else: 
    f()    
    loop(f, n-1)  

loop(hi, 5) 
0

आपको लूप() फ़ंक्शन में कॉल फ़ंक्शन हाय() को पास नहीं करना चाहिए, यह परिणाम देगा।

def hi():  
    print('hi') 

def loop(f, n):   #f repeats n times 
    if n<=0: 
    return 
    else: 
    f()    
    loop(f, n-1)  

loop(hi, 5)   # Do not use hi() function inside loop() function 

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

  • कोई संबंधित समस्या नहीं^_^