python中的“None”

2024-09-30 06:28:32 发布

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

我有一个简单的程序,从一个排序数组创建一个BST。它应该解析树而不显示本质上没有的叶子。有人能帮我解释一下为什么这个程序仍然会说“没有”。我是一个Python呆子,希望你能帮我。我已经试过了!='None'与is None一起,但得到相同的结果。在

class Node:
    def __init__(self,value):
        self.value=value
        self.nodeleft=None
        self.noderight=None

def makeBST(ia,start,end,tree):
    if (end < start):
        return None
    mid = (start + end) / 2
    n = Node(ia[mid])
    n.nodeleft = makeBST(ia, start, mid-1, tree)
    n.noderight = makeBST(ia, mid+1, end, tree)
    tree.append(n)
    return n

def printBST(root):
    print 'RR' ,root.value
    if root.nodeleft == None:
        print 'EOT'
    else:    
        print printBST(root.nodeleft)

    if root.noderight == None:
        print 'EOT'
    else:    
        print printBST(root.noderight)

if __name__ == '__main__':
    array = [1, 2, 3, 4, 5, 6]
    dic = []
    root = makeBST(array, 0, len(array)-1, dic)
    printBST(root)

Tags: selfnonetreeifvaluerootstartend
2条回答

printBST应该return这些值,而不是print它们。因为它不返回任何内容,所以它默认为None。这就是为什么printBST(root) is None

printBST(root)本身不会打印值。您必须在前面加一个print

print printBST(root)

对于PEP 8,永远不要将非类型单例与相等运算符(例如==!=)进行比较。使用is None和/或is not None

问题是您的代码将printBST的返回值传递给print。由于printBST不返回任何内容,None被打印。在

所以当你写道:

print printBST(root.nodeleft)

该代码肯定会打印None,因为printBST不包含返回语句,因此默认返回{}。在

您需要更改printBST才能执行此操作:

^{pr2}$

还要注意,使用is是测试None的正确方法。在

也就是说,您可以这样简化代码:

def printBST(root):
    if root is None:
        print 'EOT'
        return
    print 'RR', root.value
    printBST(root.nodeleft)
    printBST(root.noderight)

除了更简单之外,此代码还有一个额外的好处,即当呈现空树时不会失败。在

相关问题 更多 >

    热门问题