在树遍历的默认参数中未定义Python Self

2024-10-01 17:22:51 发布

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

我已经阅读了this answer关于在Python方法的defaultis参数中使用self的问题,但似乎无法使它与我的用例一起工作,这是一个递归的树遍历调用,如下所示:

def in_order_traversal(self, node):
    if node != None:
        print(node, end=" ")
        self.in_order_traversal(node.left)
        self.in_order_traversal(node.right)

我不得不用tree.in_order_traversal(tree.root)来调用它,但我更愿意只使用tree.in_order_traversal(),并将node=self.root作为方法定义中的第二个参数

有人能建议如何使用链接到的答案中给出的“变通方法”吗


Tags: 方法answerinselfnodetree参数if
1条回答
网友
1楼 · 发布于 2024-10-01 17:22:51

你的问题还不清楚,但我认为你的问题是你已经在使用None来表示“这是一片叶子,没有什么可打印的”,所以你不能在同一个参数中使用None作为默认值来表示“使用你的默认值”

解决这个问题的方法是定义一个“sentinel”对象,它不是None,也不是任何可能的实际值。例如:

_sentinel = object()
def in_order_traversal(self, node=_sentinel):
    if node is self._sentinel:
        node = self.root
    if node != None:
        print(node, end=" ")
        self.in_order_traversal(node.left)
        self.in_order_traversal(node.right)

相关问题 更多 >

    热门问题