Python NoneType对象不可调用(初学者)

Seb*_*Seb 39 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
Run Code Online (Sandbox Code Playgroud)

为什么它会给我这个错误?

Tim*_*ker 54

你想给函数传递对象 hi到你的loop()功能,而不是结果调用hi()(这是None因为hi()不返回任何东西).

试试这个:

>>> loop(hi, 5)
hi
hi
hi
hi
hi
Run Code Online (Sandbox Code Playgroud)

也许这会帮助你更好地理解:

>>> print hi()
hi
None
>>> print hi
<function hi at 0x0000000002422648>
Run Code Online (Sandbox Code Playgroud)

  • 别客气.此外,你可能想要调用你的函数`recurse`或类似的东西,因为它实际上没有循环... (3认同)

Nic*_*tti 6

为什么它会给我这个错误?

因为传递给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)
Run Code Online (Sandbox Code Playgroud)