gpt4 book ai didi

Python 类——可变性

转载 作者:行者123 更新时间:2023-12-01 06:19:25 27 4
gpt4 key购买 nike

我遇到了 python 问题..我有一个二叉树节点类型:

class NODE:
element = 0
leftchild = None
rightchild = None

我必须实现一个函数deletemin:

def DELETEMIN( A ):
if A.leftchild == None:
retval = A.element
A = A.rightchild
return retval
else:
return DELETEMIN( A.leftchild )

但是,当我尝试在二叉树上测试它时:

  1
/ \
0 2

它应该删除 0,只需将其设置为 null,但我得到的是:

  0
/ \
0 2

为什么我不能使 python 函数中的节点无效?他们有办法做到这一点吗?

最佳答案

Python 通过对象引用传递参数,就像 java 一样,而不是通过变量引用传递参数。当您将局部变量(包括参数)分配给新值时,您仅更改局部变量,而不更改其他任何内容(不要将其与调用变元或分配给对象的属性混淆:我们正在讨论分配裸名)。

Python 中的首选解决方案通常是返回多个值(您需要多少个值),并在调用方中适本地分配它们。因此deletemin将返回两个值,当前的returnval和修改后的节点,调用者将根据需要分配后者。即:

def DELETEMIN( A ):
if A.leftchild is None:
return A.element, A.rightchild
else:
return DELETEMIN( A.leftchild )

在调用者中,您之前有 foo = DELETEMIN( bar ),您可以改用

foo, bar = DELETEMIN( bar )

顺便说一句,特殊的大写和括号内的空格,但这是另一个问题;-)。

无法以 C 或 C++ 等方式获取“对调用者裸名的指针或引用”(无论是 Python 还是 Java)。还有其他替代方法,但它们需要的安排与您似乎喜欢的不同,因此我建议使用此处所示的多返回值方法。

关于Python 类——可变性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1355555/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com