函数返回Python中的NoneType?

2024-04-25 07:46:26 发布

您现在位置:Python中文网/ 问答频道 /正文

在CS1的一个Python项目中工作,我遇到了一个奇怪的问题,我和我的室友都无法解决。代码的一般作用域是使用数字填充0的网格,用一定大小的形状填充该空间,我们必须一路检查以确保不会将形状放在已经存在形状的位置。我这里有两个函数,它们实际上都做相同的事情,但是不管出于什么原因,当falsechecker返回列表时,它会将其作为NoneType返回。为什么会这样?

def falseChecker(binList, r, c, size):
    sCheck = isSpaceFree(binList, r, c, size)
    if sCheck == True:
        for x in range(c, c+size):
            for y in range(r, r+size):
                binList[x][y] = size
        return binList
    else:
        c += 1
        if c > len(binList):
            c = 0
            r += 1
            if r > len(binList):
                return binList
        falseChecker(binList, r, c, size)





def iChecker(binList, blockList):
    r = 0
    c = 0
    for i in blockList:
        check = isSpaceFree(binList, r, c, i)
        if check == True:
            for x in range(c, c+i):
                for y in range(r, r+i):
                    binList[x][y] = i
            c += 1
            if c > len(binList):
                c = 0
                r += 1
                if r > len(binList):
                    return binList
        else:
            binList = falseChecker(binList, r, c, i)

    return binList

main()

Tags: intrueforsizelenreturnifdef
3条回答

递归行:

falseChecker(binList, r, c, size)

必须是

return falseChecker(binList, r, c, size)

或者递归函数结束,外部函数继续因为它还没有返回。然后它不返回就结束了,因此返回None

sCheck == True为false的情况下,您不需要return任何东西。在Python中,不显式return的函数返回None

如果您试图递归调用自己并返回结果,则需要:

return falseChecker(binList, r, c, size)

falseChecker结尾处需要一个return

def falseChecker(binList, r, c, size):
    sCheck = isSpaceFree(binList, r, c, size)
    if sCheck == True:
        for x in range(c, c+size):
            for y in range(r, r+size):
                binList[x][y] = size
        return binList
    else:
        c += 1
        if c > len(binList):
            c = 0
            r += 1
            if r > len(binList):
                 return binList

        #################################
        return falseChecker(binList, r, c, size)
        #################################

在Python中,如果函数在自身结束时没有返回,则默认返回None。此外,当首次运行falseChecker时,如果sCheckFalse,则它将执行else块。此代码块不包含return。因此,falseChecker的最终返回值将是None

相关问题 更多 >