Python中的指针,其中包含无值的变量

时间:2009-05-14 10:42:41

标签: python reference

我有一个方法可以在树中创建一个新节点 - 左或右。如果该值低于我当前的值,则将其插入左侧,否则插入右侧。

我想重构这段代码,所以我首先看到我必须在哪一侧插入我的元素,然后插入它。在我实施两次之前:一次是左侧,一次是右侧。

目前看起来像这样:

def neu(self, sortByValue, secondValue):
    child = self.left if(sortByValue.lower() < self.value[0].lower()) else self.right

    if(child == None):
        child = MyTree(sortByValue,secondValue)
    else: child.neu(sortByValue,secondValue)

我的问题是,self.left是None,self.right是None。因此,当我将child创建为变量并将其设置为MyTree(...)时,self.left和self.right不会接收该值。

我能做些什么来改善这个?谢谢!

3 个答案:

答案 0 :(得分:2)

在Python中,变量是名称而不是位置。例如:

>>> a = 1
>>> b = a
>>> a = 2
>>> print b
1

在您的代码中,您只需将名称child重新绑定到不同的值(您的新节点),这对先前绑定的值(无)没有影响。

这是一个代码的改造,应该做你想要的(未经测试):

def neu(self, sortByValue, secondValue):
    def child(node):
        if(node is None):
            return MyTree(sortByValue, secondValue)
        else:
            child.neu(sortByValue, secondValue)
            return node

    if(sortByValue.lower() < self.value[0].lower()):
        self.left = child(self.left)
    else:
        self.right = child(self.right)

答案 1 :(得分:0)

你好; - )

self.leftself.right未收到该值,因为您指定的child只包含目标值的副本且未对其进行引用。

你想要一个指针 - 这在Python中不存在。

您可以使用类包装器来表达这一点,但我认为当您在if子句中编写两种可能性时,它更容易理解。

答案 2 :(得分:0)

你为什么要使用树?

我会用字典:

初​​始化:

  

tree = {}

添加新节点:

  

tree [sortByValue] = secondValue

提取东西

  

打印树[sortByValue]

不是直接的答案,而是一种更加抒情的方式