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() |
幸运的是,
您必须显式返回该值:
1 | return self.vals.pop() |
还要注意:
-
list.pop() 方法的参数是可选的; -
它也会引发
IndexError ,所以你应该只捕获那个特定的异常而不是每个异常; - 你应该尽可能使用异常链接;
-
您的
vals 成员是私有的,因此将其重命名为以下划线开头; -
整个任务有点无意义,因为Python列表已经有
append() 和pop() 方法具有完全必需的行为。
您需要使用
1 2 3 4 5 | def remove(self): try: return self.vals.pop(0) except: raise ValueError |