值在函数中正确打印,但返回时为 None

Posted

技术标签:

【中文标题】值在函数中正确打印,但返回时为 None【英文标题】:Value prints correctly in function, but when returned is None 【发布时间】:2013-03-17 01:21:34 【问题描述】:

我只是想重温一下我的 python,所以我确定我在这里犯了一个基本错误。我的代码只是一个玩具应用程序,它在循环排序的数组中找到最大的项目。

这是我的代码:

def listIsSorted(l):
    if l[0] < l[-1]:
        return 1
    return 0

def findLargest(l):
    listLength = len(l)
    if(listLength == 1):
        return l[0]
    if(listLength == 2):
        if(l[0] > l[1]):
            print("OMG I Found it: " + str(l[0]))
            return l[0]
        return l[1]

    halfway = int(listLength/2)
    firsthalf = l[:int(halfway)]
    secondhalf = l[int(halfway):]
    if(listIsSorted(firsthalf) and listIsSorted(secondhalf)):
        return max(l[halfway - 1], l[-1])
    elif (listIsSorted(firsthalf)):
        findLargest(secondhalf)
    else:
        findLargest(firsthalf)

l4 = [5,1,2,3]
print(findLargest(l4))

这会输出以下内容:

OMG I Found it: 5
None

我的问题是:为什么它被返回为类型None,而它刚刚打印为 5?

【问题讨论】:

Soo..有什么问题? 用明确的问题编辑 【参考方案1】:

我猜是因为你忘记返回递归调用的结果,所以必须这样修改:

def findLargest(l):
    listLength = len(l)
    if listLength == 1:
        return l[0]
    if listLength == 2:
        if l[0] > l[1]:
            print "OMG I Found it: 0".format(l[0])
            return l[0]
        return l[1]

    halfway = int(listLength/2)
    firsthalf = l[:int(halfway)]
    secondhalf = l[int(halfway):]
    if listIsSorted(firsthalf) and listIsSorted(secondhalf):
        return max(l[halfway - 1], l[-1])
    elif listIsSorted(firsthalf):
        return findLargest(secondhalf)
    else:
        return findLargest(firsthalf)

【讨论】:

天哪。接得好。欣赏第二双眼睛。祝你好运!

以上是关于值在函数中正确打印,但返回时为 None的主要内容,如果未能解决你的问题,请参考以下文章

打印工作,但使用回溯解决数独时返回值为 None

sqlcmd SQL 返回字符串值作为#name? - 值在 SSMS 中正确显示

为啥 const char* 返回值丢失了两个字符?但是在返回之前打印正确的值[重复]

Folders.hasNext()从Google表格中返回false,但直接从Google Script调用时为true

为啥 dapper 在进行选择时为 Guid 返回全零但表中的 guid 值设置正确?

C ++用户定义函数返回不正确[关闭]