函数在Python中返回NoneType?

BLU*_*BLU 6 python function nonetype

为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()
Run Code Online (Sandbox Code Playgroud)

aba*_*ert 13

如果sCheck == True是假的,你什么都不做return.在Python中,一个没有显式return返回任何东西的函数None.

如果你试图递归调用自己并返回结果,你想要这样:

return falseChecker(binList, r, c, size)
Run Code Online (Sandbox Code Playgroud)


lvc*_*lvc 6

递归行:

falseChecker(binList, r, c, size)
Run Code Online (Sandbox Code Playgroud)

需要是

return falseChecker(binList, r, c, size)
Run Code Online (Sandbox Code Playgroud)

或者递归函数结束,而外部函数由于尚未返回而继续运行。然后它完成而不返回,因此返回None