节点对象的打印方法不起作用

时间:2017-02-11 17:26:15

标签: python methods linked-list nodes

我使用How to Think Like a Computer Scientist教自己Python。我从文本中复制了这段代码,但我的某些原因引发了错误。任何人都能看到我失踪的东西吗?为什么Python说print_list没有定义?

class Node:
    def __init__(self, cargo = None, next = None):
        self.cargo = cargo
        self.next = next

    def __str__(self):
        return str(self.cargo)

    def print_list(node):
        while node:
            print node,
            node = node.next
        print

这是错误:

==== RESTART: /Desktop/Programming Career/Untitled.py ====

Traceback (most recent call last):
  File "Users/Desktop/Programming Career/Untitled.py", line 24, in <module>
print_list(node1)
NameError: name 'print_list' is not defined

我尝试像这样定义print_list:

def print_list(self):
    for node in self:
        print node,
        node = node.next
    print

但我得到同样的错误: NameError: name 'print_list' is not defined

2 个答案:

答案 0 :(得分:1)

您已定义方法print_list(),但您尝试将其称为函数。删除def print_list(node):之前的缩进,然后它将成为一个函数。

class Node:
    def __init__(self, cargo = None, next = None):
        self.cargo = cargo
        self.next = next

    def __str__(self):
        return str(self.cargo)

def print_list(node):
    while node:
        print node,
        node = node.next
    print

或者使它成为一种方法,然后将其称为:

class Node:
    def __init__(self, cargo = None, next = None):
        self.cargo = cargo
        self.next = next

    def __str__(self):
        return str(self.cargo)

    def print_list(self):
        node = self
        while node:
            print node,
            node = node.next
        print

然后您可以拨打print_list(node1)

而不是node1.print_list()

请注意,如果你确实使它成为一个方法,它会像你编写的那样工作但是对于第一个参数使用约定self似乎更清晰,而你可以重新绑定self它是可能更清楚,不要。

答案 1 :(得分:1)

我认为您希望函数print_list不属于Node类。如果是这种情况,只需删除print_list函数的缩进。 Python不使用像java或C ++这样的括号,而是使用缩进代替。在这种情况下,Python将print_list解释为属于Node类的函数。

class Node:
    def __init__(self, cargo = None, next = None):
        self.cargo = cargo
        self.next = next

    def __str__(self):
        return str(self.cargo)

def print_list(node):
    while node:
        print node
        node = node.next
print