Подтвердить что ты не робот

Объект 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

Почему это дает мне эту ошибку?

4b9b3361

Ответ 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)