【问题标题】:How to assign a NULL value to a pointer in python?如何将NULL值分配给python中的指针?
【发布时间】:2014-03-12 17:47:23
【问题描述】:

我是 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 )

谢谢!

【问题讨论】:

  • Noneis None

标签: python


【解决方案1】:

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 a singleton instance,它is considered more idiomatic 使用is 并比较引用相等:

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

【讨论】:

    【解决方案2】:
    left = None
    
    left is None #evaluates to True
    

    【讨论】:

      【解决方案3】:

      通常你可以使用None,但你也可以使用objc.NULL,例如

      import objc
      val = objc.NULL
      

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

      另见:Python objc.NULL Examples

      【讨论】:

      • 链接已失效。 this 是当前文档吗?
      猜你喜欢
      • 1970-01-01
      • 2015-01-12
      • 2018-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-10
      • 1970-01-01
      • 2014-05-13
      相关资源
      最近更新 更多