Объект Python NoneType не может быть вызван (новичок)
Я рассказываю строки 1 и 5 (новые для отладки/программирования, не уверены, что это помогает)
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
Почему это дает мне эту ошибку?
Ответы
Ответ 1
Вы хотите передать объект функции hi
вашей функции loop()
, а не результат вызова hi()
(который None
, так как hi()
ничего не возвращает).
Итак, попробуйте следующее:
>>> loop(hi, 5)
hi
hi
hi
hi
hi
Возможно, это поможет вам лучше понять:
>>> print hi()
hi
None
>>> print hi
<function hi at 0x0000000002422648>
Ответ 2
Почему это дает мне эту ошибку?
Поскольку ваш первый параметр, который вы передаете функции 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)