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

1 投票
3 回答
2297 浏览
提问于 2025-04-17 19:48

我打算在大学举办一个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 个回答

1

我觉得你不能设置命令行让它不显示表达式的结果,不过如果你把每个表达式都赋值给一个变量,这样行不行?那样就不会打印任何东西了……

比如:

x=5
y=7
z = x+y
11

在交互式会话中,打印表达式的过程是通过调用 sys.displayhook 来实现的。你只需要把它重写成一个什么都不做的函数(NOP)就可以了:

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

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

在普通的 Python 会话中,它是连接到 sys.stdout 的。那些在图形界面上提供 Python Shell 的应用程序,通常会用它来把表达式的值打印回给用户。

你可以写一个 pythonrc.py 文件(放在 ~/.pythonrc.py),这样每次调用解释器时都会默认执行这个文件里的内容。关于 sys.displayhook 的更多文档可以在这里找到: http://docs.python.org/3/library/sys.html#sys.displayhook

2

我知道你不是来这里听教学建议的,但如果没有输出,x + y到底是干嘛的呢?如果你不想把结果输出或者存起来,那为什么还要输入它呢?

你的学生会感到困惑:“x + y到底有什么用?”

如果你想展示某个表达式,最好在前面加上一个print语句,或者把它赋值给某个变量。

我发现很多人反而会搞混,甚至不知道return其实是把值返回给他们,他们总是想用print。别忘了,你可以互动式地定义函数,并在里面使用返回值。这样你就可以告诉他们,函数会返回那个值,即使没有print

撰写回答