关于python:类方法不返回值

Class method doesn't return value

我正在完成MTIx 6.00.1x计算机科学入门课程,并且在创建类方法时遇到了麻烦。 具体来说,我的'Queue'类中的'remove'函数不会像我期望的那样返回值。

以下是请求的上下文:

For this exercise, you will be coding your very first class, a Queue class. In your Queue class, you will need three methods:

init: initialize your Queue (think: how will you store the queue's elements? You'll need to initialize an appropriate object attribute in this method)

insert: inserts one element in your Queue

remove: removes (or 'pops') one element from your Queue and returns it. If the queue is empty, raises a ValueError.

我用'remove'方法编写了下面的代码,但是虽然方法的行为正确地改变了数组,但它并没有返回'popped'值:

1
2
3
4
5
6
7
8
9
10
11
12
13
class Queue(object):

    def __init__(self):
        self.vals = []

    def insert(self, value):
        self.vals.append(value)

    def remove(self):
        try:
            self.vals.pop(0)
        except:
            raise ValueError()

任何帮助将不胜感激!


好吧,在Python中返回相当容易,所以就这样做:

1
2
3
4
5
def remove(self):
    try:
        return self.vals.pop(0)
    except:
        raise ValueError()

幸运的是,pop()已经同时删除并返回所选元素。


您必须显式返回该值:

1
return self.vals.pop()

还要注意:

  • list.pop()方法的参数是可选的;
  • 它也会引发IndexError,所以你应该只捕获那个特定的异常而不是每个异常;
  • 你应该尽可能使用异常链接;
  • 您的vals成员是私有的,因此将其重命名为以下划线开头;
  • 整个任务有点无意义,因为Python列表已经有append()pop()方法具有完全必需的行为。


您需要使用return来返回值。 将您的删除方法更新为:

1
2
3
4
5
def remove(self):
     try:
         return self.vals.pop(0)
     except:
         raise ValueError