【问题标题】:initializing basic stack, but errors i do not comprehend初始化基本堆栈,但我不理解错误
【发布时间】:2014-01-31 03:09:18
【问题描述】:

我正在尝试使用推送和弹出功能初始化一个基本堆栈。 问题在测试时出现。您会在代码中注意到我已经推送了 2 次,因此堆栈的打印应该显示[5,5],而它正在显示None。我可以修改代码以使其最终工作,但是我不会完全理解基本概念和我的方式的错误。所以我请求建议和指点。 请检查这些代码并告诉我我做错了什么。

这是包含所有功能的类的代码,它被命名为stack_class

class Stack:

    def __init__(self):
        self._values = []
        print ('Stack initialized...')
        return

    def push(self, var):
        ok = self._values.append(var)
        return ok

    def pop(self):
        self.stack.pop()

    def __str__(self):
        output = "{0}".format(self.ok)
        return output

这是测试代码:

from stack_class import Stack

ob_1 = Stack()
ob_1.push(5)
print(ob_1.push(5))

【问题讨论】:

  • 另外,为什么每个构造函数通常都有一个空的返回语句?它到底返回了什么?
  • 他们没有,根据我的经验。构造函数末尾不需要空的 return 语句。一个普通的return 语句返回None。就像简单地从函数的末尾掉下来一样。

标签: oop python-3.x stack


【解决方案1】:

发生的情况是append 方法没有返回任何内容。

print [].append(1)
>>> None

它完成了它的工作,但不返回任何东西,这就是为什么你在变量ok 中得到None。我认为您想返回_values

def push(self, var):
    self._values.append(var)
    return self._values

输出:

Stack initialized...
[5, 5]

另外,这是我第一次了解空返回约定。没必要。

【讨论】:

  • 谢谢,我现在明白了。最后一个问题。我们必须使用 self._values 吗?为什么我们不能使用任何其他变量?如果要考虑多个值怎么办?我尝试了另一个变量,但代码不起作用。
  • 你可以改变它,它不重要。但是记住重命名出现_values每个名称。
猜你喜欢
  • 2012-02-29
  • 2014-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-18
  • 2016-04-18
  • 2017-05-27
  • 2017-09-24
相关资源
最近更新 更多