【发布时间】:2017-06-22 08:21:59
【问题描述】:
在这里问这个问题,因为上一个已关闭:https://stackoverflow.com/questions/41315555/traversing-a-linked-list-getting-the-output-twice
更新:我正在使用 Python 3.6、Eclipse Neon.2 Release (4.6.2)(32 位)和 PyDev 5.5
我创建了两个类,Node.py 和 UnorderedList.py。
Node.py如下:
class Node:
#constructor
def __init__(self,initdata):
self.data = initdata
self.next = None
def hasNext(self):
return self.next != None
UnorderedList.py:
class UnorderedList:
def __init__(self):
self.head = None
self.last = None
def append(self,data):
temp = Node(data)
if(self.head == None):
self.head = temp
self.last = self.head
else:
self.last.next = temp
self.last = self.last.next
def traverse(self):
current= self.head
while current != None:
print(current.data)
current = current.next
我正在测试它,使用以下代码:
ul = UnorderedList()
ul.append(1)
ul.append(2)
ul.traverse()
当我在一个 Python 脚本中插入这两个类并运行代码时,如预期的那样,输出是:
1
2
然而,当
- 我把这两个类放在不同的模块中,包结构如下,
-
将导入行放在 UnorderedList.py 的顶部:
import py_linked_lists.Node as Node -
对 append() 进行如下修改:
def append(self,data): temp = Node.Node(data) #rest all code remains same -
运行代码,我得到了两次输出:
1 2 1 2
更新:
我在 https://stackoverflow.com/questions/41315555/traversing-a-linked-list-getting-the-output-twice 中尝试了 cmets 中的建议,并通过使用 if __name__ == "__main__"
成功地防止了输出两次
保护块,如下,在UnorderedList.py中:
if __name__ == "__main__":
ul = UnorderedList()
ul.append(1)
ul.append(2)
ul.traverse()
输出:
1
2
感谢@Blckknght。
正如我在这里的答案中看到的,What does if __name__ == "__main__": do?,如果我不使用if __name__ == "__main__",我从py_linked_lists.Node 导入的Node 类也将被执行。
我无法理解的是Node.py 的执行如何影响输出,当那里没有这样的代码时,只存在一个类结构。
【问题讨论】:
-
无论是在此处还是在原始问题中,您都没有说明
__init__.py中的内容。是空的吗? -
__init__.py包含:import py_linked_lists.UnorderedList as UnorderedList
标签: python eclipse python-3.x pydev