【发布时间】:2020-07-15 23:42:04
【问题描述】:
class linkedlist:
def __init__(self,value):
self.head={'value':value,'next':None}
self.tail=self.head
self.length=1
def append(self,value):
self.newnode={'value':value,'next':None}
self.tail['next']=self.newnode
self.tail=self.newnode
self.length+=1
if __name__=='__main__':
l=linkedlist(10)
l.append(5)
l.append(16)
代码运行良好,但我对 __init__ 的工作方式有疑问。每次函数调用都会调用__init__ 吗?这有点令人困惑,因为我正在更改尾部和头部值。
这里的main函数是如何工作的?
【问题讨论】:
-
不,
__init__在创建对象时被调用,“init”代表“initializer”。它最初发生。所以它在这里被调用一次:l=linkedlist(10) -
您可以通过将打印添加到
__init__并查看会发生什么来进行检查。 -
linkedlist是队列,但您对列表中的每个节点使用未命名的字典{'value':value,'next':None}。您创建了 1 个队列(并调用了一个linkedlist.__init__)。每次追加内容时,都会创建一个新字典,并调用其__init__。 -
@juanpa.arrivillaga 然后当我通过
l.append(16)时,我正在更新tail,但head是如何更新的? -
self.head没有得到更新。在.append(16)。但是,当self.head恰好引用与self.tail相同的对象时,您确实改变了对象(当列表中有一个项目时)
标签: python python-3.x linked-list singly-linked-list