2012-03-19 13 views
24

I mówi mi, linia 1 i linia 5 (nowy do debuggowania/programowania, nie wiem, czy to pomaga)Python NoneType obiekt nie jest wymagalne (początkujący)

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 

Dlaczego to dać mi ten błąd?

Odpowiedz

36

chcesz przekazać funkcję obiekthi do funkcji loop(), a nie w wyniku rozmowy do hi() (co jest None od hi() niczego nie wrócić).

Więc spróbuj tego:

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

Może to pomoże Ci lepiej zrozumieć:

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

Ohh Rozumiem, bardzo dziękuję – Foxic

+2

Nie ma za co. Poza tym możesz chcieć wywołać swoją funkcję 'recurse' lub coś podobnego, ponieważ w rzeczywistości nie jest w pętli ... –

+1

@ 30trix: pamiętaj, aby zaakceptować odpowiedź, jeśli rozwiązała ona Twój problem. Witamy w Stackoverflow. :) – Mizipzor

2

Dlaczego to dać mi ten błąd?

Ponieważ pierwszy parametr przekazać do funkcji loop jest None ale czynność spodziewa się wpłacone obiekt, który None obiekt nie jest.

Dlatego musisz przekazać obiekt wywoływalny, który jest w twoim przypadku obiektem funkcji 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

Nie powinieneś przekazywać funkcji wywołania hi() do funkcji pętli(), to da wynik.

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 
Powiązane problemy