在Python交互式会话中禁用自动打印
我打算在大学举办一个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 个回答
我觉得你不能设置命令行让它不显示表达式的结果,不过如果你把每个表达式都赋值给一个变量,这样行不行?那样就不会打印任何东西了……
比如:
x=5
y=7
z = x+y
在交互式会话中,打印表达式的过程是通过调用 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
我知道你不是来这里听教学建议的,但如果没有输出,x + y
到底是干嘛的呢?如果你不想把结果输出或者存起来,那为什么还要输入它呢?
你的学生会感到困惑:“x + y
到底有什么用?”
如果你想展示某个表达式,最好在前面加上一个print
语句,或者把它赋值给某个变量。
我发现很多人反而会搞混,甚至不知道return
其实是把值返回给他们,他们总是想用print
。别忘了,你可以互动式地定义函数,并在里面使用返回值。这样你就可以告诉他们,函数会返回那个值,即使没有print
。