Python方法返回无

时间:2014-10-30 13:57:43

标签: python return

我有一个非常奇怪的问题。我写了一个方法,在给定上述集合时,确定描述一组数字的公式的程度。这个方法非常简单,为了调试目的,我已添加了几行:

def getdeg(numlist, cnt): #get the degree of the equation describing numlist
    count = cnt #initial run should be with cnt as 0
    templist = []
    for i in range(len(numlist) - 1): #exclude the last item (which doesn't have an item after it)
        templist.append(numlist[i+1] - numlist[i]) #append the val of index i+1 minus index i
    count += 1
    print(templist)
    if not allEqual(templist):
        print("Not all equal, iterating again")
        getdeg(templist, count)
    else:
        print(count)
        return count

def allEqual(numlist):
    if len(numlist) == 1:
        return True
    for i in range(len(numlist) -1):
        if not (numlist[i] == numlist[i+1]):
            return False

    return True

现在,我在一组数字上运行这个,我知道用三度方程来描述,就像这样:

x = getdeg([2, 8, 9, 11, 20], 0)
print(x)

相当简单,是吗?除非您运行此操作,否则会打印出以下内容:

[6, 1, 2, 9]
Not all equal, iterating again
[-5, 1, 7]
Not all equal, iterating again
[6, 6]
3
None

一切都很好看,直到那个"没有。"它在那做什么?我会假设else条件没有被执行,但它打印3就好了,所以很明显。这也意味着该计划"知道" count的价值是什么,但它没有正确回归。有人可以告诉我究竟发生了什么事吗?

2 个答案:

答案 0 :(得分:3)

if not allEqual(templist):
    print("Not all equal, iterating again")
    getdeg(templist, count)

请记住,当一个方法以递归方式调用自身时,如果要返回一个值,仍然需要显式return该值。

if not allEqual(templist):
    print("Not all equal, iterating again")
    return getdeg(templist, count)

答案 1 :(得分:1)

您还需要在if子句中返回一个值。

return getdeg(templist, count)