为什么在 Python 中调用函数和编写语句的工作方式明显不同?

Why does calling a function and writing statements explicitly work differently in Python?

我需要为我实现的链表插入头部操作。但是,通过函数调用(如 insertToHead)执行此操作并在我需要的地方显式编写语句会产生不同的结果。我想知道 Python 中的哪个 属性 导致了这种差异,但我无法弄清楚。

更具体地说,假设我有以下 class 链表:

class Node:
    value = None
    nextNode = None

    def __init__(self, value):
        self.value = value

    def insertToHead(self, value):
        newHead = Node(value)
        newHead.nextNode = self
        return newHead

对于单个元素(比如2)的链表,我想在头部插入一个节点(比如0),形成链表0 -> 2。

我是这样创建链表的

head = Node(2)

然后我尝试了两种插入0的方式:

  1. 在我需要的地方显式地编写语句
newHead = Node(0)
newHead.next = head
head = newHead

现在 head 是 0,而不是 0 -> 2。

  1. 呼叫insertToHead
head = head.insertToHead(0)

head 在这条语句之后是 0 -> 2。

有谁知道为什么这两种方法会产生不同的结果?

你打错了。 newHead.next 应该是 newHead.nextNode.

单链表的简单实现:

class Node:
    def __init__(self, value = None, nextNode = None):
        self.value = value
        self.nextNode = nextNode

class LinkedList:
    def __init__(self):
        self.head = None  # will point to the head of the list
        self.tail = None  # will point to the tail of the list
        self.size = 0     # size of the linked list

    def insert_to_head(self, data):
        # when push front, the head of the linked list will be Node()
        self.head = Node(data, self.head)
        if self.tail == None:  # if tail is None, means it is a single element
            self.tail = self.head
        self.size += 1  # increase size by one


    def __str__(self):
        ret_str = ""
        node = self.head
        while node != None:
            ret_str += str(node.value) + " -> "
            node = node.nextNode
        return ret_str




myLinkedList = LinkedList()
myLinkedList.insert_to_head(3)
myLinkedList.insert_to_head(2)

print(myLinkedList)