Python:函数始终返回None

hel*_*elm 9 python return

我有一些基本上看起来像这样的Python代码:

my_start_list = ...

def process ( my_list ):
    #do some stuff

    if len(my_list) > 1:
        process(my_list)
    else:
        print(my_list)
        return my_list

print(process(my_start_list))
Run Code Online (Sandbox Code Playgroud)

奇怪的是:print(my_list)打印出正确的内容.但是,打印函数返回值的第二个print语句始终打印"None".即使我用return("abc")替换正常的return语句,它仍然是None.

由于变量的内容在return语句之前似乎是正确的一行,我不知道从哪里开始调试.是否有可能导致此问题的常见问题?

pra*_*nsg 11

这是发生的事情:

  1. 你打电话process(my_start_list).
  2. 在函数中,if如果len(my_list) > 1在那里没有return语句,则执行该块.现在,由于else尚未执行,因为这是唯一拥有return子句的地方,所以返回默认值None.
  3. 如果列表中包含0或1个元素,则返回该列表.

要解决此问题,您需要返回返回的列表process(my_list).

那是:

def process(my_list):
    # do some stuff
    ...
    if len(my_list) > 1:
        return process(my_list)
    else:
        print(my_list)
        return my_list
Run Code Online (Sandbox Code Playgroud)


Hen*_*ter 9

当你有1或0个元素(基本情况)时,你只返回列表.在第一个块中也需要一个return语句,在那里进行递归调用,否则你深入到基本情况,将length-1列表返回到下一个级别,然后返回None剩下的部分.所以你想要的是这样的,相反:

def process(my_list):
    # Do some stuff.
    if len(my_list) > 1:
        return process(my_list) #If you don't return this result, you return None
    else:
        print(my_list)
        return my_list
Run Code Online (Sandbox Code Playgroud)

现在每种情况(不仅仅是基本情况)都有一个返回值,因此返回值将一直传播回初始调用.

  • @marksweb:**为什么**单一回报会更好?这已被讨论过死亡,但现在已不再适用.请参阅[函数是否只有一个返回语句?](http://stackoverflow.com/q/36707) (4认同)