这个python返回语句有什么问题?

时间:2014-05-16 05:57:56

标签: python return

这段代码只是通过分而治之的算法找到最大的数字。代码本身可以很好地工作,并在my_data [0]中找到大号和存储。它正确打印最大数字。但是当我尝试返回它并存储在'val'变量中时,'None'被存储而不是最大的数字。为什么return语句只返回'none'而不是my_data [0] .. ??由于返回值不正确,我无法继续执行代码。谁能说出这是什么错?提前谢谢..

def largest(my_data):
    if len(my_data) == 1:
        print my_data[0]
        return my_data[0]
    else:
        alist = []
        blist = []
        for i in range(0,len(my_data),2):
            if my_data[i] > my_data[i+1]:
                alist.append(my_data[i])
                blist.append(my_data[i+1])
            else:
               alist.append(my_data[i+1])
               blist.append(my_data[i])
        my_data = list(alist)
        largest(my_data)
my_data = [12,45,63,13,76,87,23,85,56,123,7856,132,786,124,756,25366468]
val = largest(my_data)
print val

2 个答案:

答案 0 :(得分:3)

编写递归代码时,需要确保递归调用返回的值必须传回。所以,

    largest(my_data)

必须像这样返回

    return largest(my_data)

另外,

my_data = list(alist)
如果您真的想将alist转换为列表,则不需要此声明。因为它已经是一个列表。所以,你可以直接写

    return largest(alist)

好奇的是,您放弃了添加到blist的值,那为什么还要加入?

所以,如果你真的不需要blist,那么你的代码可以用列表理解来编写,就像这样

return largest([my_data[i] if my_data[i] > my_data[i+1] else my_data[i+1]
                  for i in range(0,len(my_data),2)])

答案 1 :(得分:0)

如果您阅读了代码,您会注意到else子句中没有返回任何内容。如果你想让它成为一个递归函数,通常就是从递归调用中返回值。