1

我将举办一个 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语句以避免以后混淆。这并不重要,但令我惊讶的是,我无法在任何地方找到任何设置。

我将能够预先配置机器,所以任何解决方案都可以工作。有谁知道这是否可能,或者交互式会话的哪些更改会产生这种效果?

4

3 回答 3

10

交互式会话中的表达式打印通过调用 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

于 2013-03-20T21:50:02.637 回答
1

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

例如

x=5
y=7
z = x+y
于 2013-03-20T21:29:12.517 回答
1

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

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

如果你想显示一些表达式,只需print在它前面始终放置一个语句,或者将它分配给一个值。

我发现人们经常反过来混淆,以至于他们不知道这return实际上给了他们价值,他们总是想使用print. 不要忘记您可以交互地定义函数,并将返回值放在那里。然后您可以向他们展示该函数返回该值,即使没有prints。

于 2013-03-20T21:51:19.627 回答