在不使用临时变量的情况下交换类中的变量

时间:2016-06-10 02:26:25

标签: python python-2.7

这是代码。它是标准的二进制树类。

class BinaryTree:
    def __init__(self,rootObj):
        self.key = rootObj
        self.leftChild = None
        self.rightChild = None

    def insertLeft(self,newNode):
        if self.leftChild == None:
            self.leftChild = BinaryTree(newNode)
        else:
            t = BinaryTree(newNode)
            t.leftChild = self.leftChild
            self.leftChild = t

在else子句中,我可以删除t变量并简单地执行此操作:

BinaryTree(newNode).leftChild, self.leftChild = self.leftChild, BinaryTree(newNode)

这会有用吗?看起来我两次调用BinaryTree类,是否会创建两个不同的实例?

2 个答案:

答案 0 :(得分:1)

不幸的是,您需要能够在编写的同时跟踪新创建的BinaryTree实例和之前的self.leftChild值,并且使用同时分配将不起作用场景。

但是,如果您允许在构造函数中指定leftChild,则可以立即使用BinaryTree创建新的self.leftChild实例:

class BinaryTree:
    def __init__(self,rootObj, leftnode=None, rightnode=None):
        self.key = rootObj
        self.leftChild = leftnode
        self.rightChild = rightnode

    def insertLeft(self,newNode):
        #if self.leftChild == None: pass leftnode=None to constructor.
        # which is the same as passing leftnode=self.leftChild
        self.leftChild = BinaryTree(newNode, leftnode = self.leftChild)

这样,新创建的节点在初始化时就会设置自己的leftChild属性,因此无需在insertLeft中手动执行此操作。

答案 1 :(得分:0)

BinaryTree中,您必须创建一个临时变量,因为使用Object。如果是整数可以是:

a = 5
b = 3
a += b # a = 8
b = a - b # b = 5
a -= b # a = 3
print(a)
>>3
print(b)
>>5