Python函数变量赋值与自定义类

Michael Cheng

为什么 replaceNode1 有效而 replaceNode2 无效?我考虑过可变性,但 None 是可变的。感谢您的时间

class Node:
    def __init__(self, val):
        self.val = val
        self.left = None
        self.right = None

def replaceNode1():
    node = [None]
    def doit(val, node):
        node[0] = Node(val)
    doit(20, node)
    return node[0].val    # return 20

def replaceNode2():
    node = None
    def doit(val, node):
        node = Node(val)
    doit(20, node)
    return node.val      # return 'NoneType' has no attribute 'val'
比斯洛特3

python 中的赋值运算符没有做你认为它在做的事情。我希望这有助于阐明:

假设您使用 None 创建一个列表对象,因为它是唯一的元素,并使用以下命令获取其内存位置id

>>> node = [None]

>>> id(node)

4397969352

现在你改变它的第一个值:

>>> node[0] = 100

>>> print(node[0])

100

>>> id(node)

4397969352

列表的内存位置没有改变(但是它的第一个元素的内存位置已经改变了)。当您更改变量 name的值时,python 会将变量的名称分配给另一个内存位置:

>>> node = None

>>> id(node)

4394834344

>>> node = Node(10)

>>> id(node)

4397990184

如上所示,节点现在指向内存中的不同位置。

因此,在你的代码,在那里你调用函数replaceNode2,你指定本地变量 节点到一个新的Node对象,它指向一个新的存储位置,而节点父范围仍指向原始存储位置是仍然是一个 NoneType 对象这就是你得到那个错误的原因。不是因为 NoneType 对象的可变性,而是因为 python 将对象分配给名称的方式和变量范围的工作方式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python - 如何实现与 NumPy 函数兼容的自定义类?

来自分类Dev

类定义之外的变量赋值

来自分类Dev

在 Python 中引用自定义类

来自分类Dev

自定义python模块中的变量

来自分类Dev

Python中的自定义聚合函数

来自分类Dev

将自定义函数添加到 Python 中的现有类

来自分类Dev

Python中自定义函数中的输入或变量满足条件时如何退出while循环

来自分类Dev

从Actvity将变量传递到自定义视图类

来自分类Dev

如何从变量创建自定义类?(不是对象)

来自分类Dev

从Actvity将变量传递到自定义视图类

来自分类Dev

自定义类中的变量始终显示0

来自分类Dev

无法设置自定义单元类的变量

来自分类Dev

SASS 用变量自定义类名

来自分类Dev

编写自定义函数以基于另一个表转换数据框中的变量类

来自分类Dev

教义类,可以添加自定义函数吗?

来自分类Dev

将自定义函数添加到类

来自分类Dev

Swift:自定义类的函数调用引发异常

来自分类Dev

自定义类函数引起的内存错误

来自分类Dev

在自定义jQuery类中使用keyup函数

来自分类Dev

将文件读取到自定义类构造函数

来自分类Dev

Java自定义异常中的超类构造函数

来自分类Dev

STL映射自定义键类[默认构造函数]

来自分类Dev

尝试不使用新的自定义类构造函数

来自分类Dev

如何从Firebase的自定义类函数中调用数据

来自分类Dev

在 Pandas DataFrames 上应用自定义类/函数

来自分类Dev

仅变量输入的自定义sprintf(...)样式函数

来自分类Dev

R将变量传递到自定义函数purrr

来自分类Dev

在其函数内使用JavaScript自定义对象变量

来自分类Dev

将自定义函数调用分配给变量

Related 相关文章

热门标签

归档