我想知道哪個參數self._insertInteral(value, self.root.rightChild)
是根據價值和哪些參考?我仍然在學習Python,並在Python中閱讀關於通過對象方法學的知識。我認爲我對這個主題的誤解可能是爲什麼我的函數插入二叉樹不會導致插入的值。Python中的這些參數是通過值還是通過引用傳遞的?
這裏是我的代碼:
class Node:
def __init__(self, leftChild, rightChild, value):
self.leftChild = leftChild
self.rightChild = rightChild
self.value = value
class BinaryTree:
def __init__(self, root):
self.root = root
def _insertInternal(self, value, root):
if root is None:
root = Node(None, None, value)
print 'new node, root.value = ' + str(root.value)
return
if root.value > value:
self._insertInternal(value, root.leftChild)
else:
self._insertInternal(value, root.rightChild)
def insert(self, value):
print 'attempting to insert value = ' + str(value)
if self.root is None:
self.root = Node(None, None, value)
return
elif self.root.value > value:
print str(self.root.value) + '>' + str(value)
self._insertInternal(value, self.root.leftChild)
else:
print str(self.root.value) + '<' + str(value)
self._insertInternal(value, self.root.rightChild)
if __name__ == '__main__':
root = Node(None, None, 10)
tree = BinaryTree(root)
print tree.root.leftChild
print tree.root.rightChild
print tree.root.value
tree.insert(5)
print tree.root.leftChild
print tree.root.rightChild
print tree.root.value
我做了結帳這個帖子Understanding Python's call-by-object style of passing function arguments但特別想了解一下這個例子。
不,它的原因......考慮這個......在你的代碼中,你實際上(在找到正確的地方之後),將該節點添加到樹中? – donkopotamus
正如您發佈的鏈接所說,Python沒有傳遞值或傳遞引用,只能傳遞對象。 – interjay
(不要使用'=='比較None,使用'is'(如'if x is None:...')) – donkopotamus