在Python交互式会话中禁用自动打印

时间:2013-03-20 21:16:05

标签: python python-2.7 python-interactive

我将参加一个Python研讨会,在我的大学Python中教一些初级程序员。

我正在寻找一种方法来修改Python交互式会话的默认行为,以便表达式不会自动打印出结果。例如,进行以下交互式会话:

wil@calcifer:~$ python
Python 2.7.3 (default, Aug  1 2012, 05:16:07)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> x = 5
>>> y = 7
>>> x + y
12
>>> first_name = "Test"
>>> last_name = "Person"
>>> first_name + last_name
'TestPerson'
>>>

这将强制使用print语句以避免以后混淆。 这并不重要,但我很惊讶我无法在任何地方找到任何设置。

我可以事先预先配置机器,因此任何解决方案都可以。有没有人知道这是否可行,或者交互式会话的哪些变化会产生这种效果?

3 个答案:

答案 0 :(得分:7)

交互式会话中的表达式打印是通过调用来调解的 sys.displayhook。只需将其覆盖为NOP:

>>> import sys
>>> sys.displayhook = lambda x: None

>>> 2 + 3
>>> print 2 + 3
5
>>> 

在普通的Python会话中,它连接到sys.stdout。在GUI上提供Python shell的应用程序被指示使用它将表达式值打印回用户。

每次调用解释器时,您都可以编写pythonrc.py(〜/ .pythonrc.py文件)来默认执行此操作。 有关sys.displayhook的更多文档,请访问: http://docs.python.org/3/library/sys.html#sys.displayhook

答案 1 :(得分:1)

我认为您不能将shell配置为抑制表达式的结果,但如果您只是将每个表达式分配给变量,它会起作用吗?它不会打印任何东西......

E.G。

x=5
y=7
z = x+y

答案 2 :(得分:1)

我知道你没有来这里接受教学建议,但没有输出,x + y应该做什么?如果您不希望将值输出或存储在任何地方,为什么要输入它呢?

你的学生会感到困惑:“x + y做了什么?”

如果要显示某个表达式,只需在其前面始终放置print语句,或将其指定给值。

我发现人们常常因此而感到困惑,以至于他们不知道return实际上给了他们价值回报,他们总是想要使用print。不要忘记您可以交互式定义函数,并将返回值放在那里。然后你可以告诉他们函数返回那个值,即使没有print s。