如何在Python中将NULL值赋给指针?

问题描述 投票:0回答:4

我是C程序员。我是Python新手。在 C 中,当我们定义二叉树节点的结构时,我们将 NULL 分配给它的左右子节点,如下所示:

struct node 
{
    int val;  
    struct node *right ;  
    struct node *left ;  
};   

初始化节点时,我们写为:

val = some_value  
right = NULL;  
left = NULL;  

现在我的问题是:如何在Python中为节点的左右指针分配NULL值?

我们如何针对 Python 版本的 NULL 进行测试?在 C 语言中它将是:

if( ptr->right == NULL )

谢谢!

python
4个回答
93
投票

Python中的所有对象都是通过引用实现的,因此源代码中不存在对象和对象指针之间的区别。

相当于

NULL
的 Python 称为
None
(好信息here)。由于 python 中的所有对象都是通过引用实现的,因此您可以将结构重写为如下所示:

class Node:
    def __init__(self): #object initializer to set attributes (fields)
        self.val = 0
        self.right = None
        self.left = None

然后它的工作原理非常像你所期望的:

node = Node()
node.val = some_val #always use . as everything is a reference and -> is not used
node.left = Node()

请注意,与 C 中的

NULL
不同,
None
不是“指向无处的指针”:它实际上是
class NoneType
的唯一实例。 因此,由于
None
是一个常规对象,您可以像使用
node.left == None
测试任何其他对象一样测试它。但是,由于
None
是单例实例
,因此使用 is 并比较引用相等性
 被认为更惯用

if node.left is None:
   print("The left node is None/Null.")

9
投票
left = None

left is None #evaluates to True

1
投票

通常您可以使用

None
,但您也可以使用
objc.NULL
,例如

import objc
val = objc.NULL

在 Python 中使用 C 代码时特别有用。

另请参阅:Python objc.NULL 示例


0
投票

另外,我相信只测试对象本身而不进行比较,就可以验证 null/None。所以:

if val is null: 

等于:

if val:
© www.soinside.com 2019 - 2024. All rights reserved.