2014-01-22 153 views
2

我正在学习算法和数据结构(Python)。在本书中,有一个“堆栈”的例子,它带有返回某些值的方法。在本书中,这些值在调用方法时打印。但是,当我运行程序时,什么都不打印。我必须自己打印返回值。这是Python 2和3之间的差异,还是我做错了什么?这是代码。为什么Python不打印返回值?

class Stack: 
    def __init__(self): 
     self.items = [] 

    def isEmpty(self): 
     return self.items == [] 

    def push(self, item): 
     self.items.append(item) 

    def pop(self): 
     return self.items.pop() 

    def peek(self): 
     return self.items[len(self.items)-1] 

    def size(self): 
     return len(self.items) 

s=Stack(); s.push(5) 
s.size() 
s.isEmpty() 
s.peek() 

因此,这应该打印“1”,“False”和“5”。但事实并非如此。

+0

如果你认为你的问题的回答,你可以接受一个答案[这里](http://stackoverflow.com/about) – embert

回答

7

在交互式解释器中,为方便起见,Python将打印表达式值(None除外)的repr。在脚本中,您必须手动打印,因为在脚本中自动打印会非常尴尬。

3

为什么要打印,如果你没有包括打印声明? 尝试:

print s.size() 
print s.isEmpty() 
print s.peek() 
+0

或'print(s.size())'如果你使用Python 3 – embert

+0

@embert:的确如此。错过了原来的帖子。感谢您的加入。 – elParaguayo

+0

我认为它会打印它,因为这是我的书中发生的事情。但是,我不明白在这本书中他们处于“互动模式”。我习惯于Matlab(你可能知道),除非添加“;”,否则所有内容都会打印出来。现在我明白了不同之处。谢谢! – Myone

0

您可以

s=Stack() 
s.push(5) 
print s.size() 
print s.isEmpty() 
print s.peek() 

或更换您的return语句与print

2

我假设你有你的输入文件中的代码,说a.py.在这种情况下,s.size()等的值将被忽略。另一方面,如果您在交互式Python会话中输入类似的内容,则会自动为您打印这些值。尝试所有这些调用的最佳方法是:从输入文件中删除s上的所有操作,只保留Stack定义。然后使用

python -i a.py 

这将加载与栈定义,然后交互模式(所谓的REPL)文件将可用,在那里你可以尝试s=Stack(); s.push(5)