2013-03-20 47 views
0

我將舉辦一個Python研討會,在我的大學Python中教授一些初學者級別的程序員。在Python交互式會話中禁用自動打印

我正在尋找一種方法來修改Python交互式會話的默認行爲,以便表達式不會自動打印出結果。例如,藉此以下交互式會話:

[email protected]:~$ 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

不,請不要這樣做。交互式shell是我希望Python程序員知道如何使用的主要調試工具。不要教導一箇中性的REPL! – 2013-03-20 21:28:21

+2

我知道你沒有來這裏教學,但沒有輸出,'x + y'應該做什麼?爲什麼要輸入它,如果你不想把值輸出或存儲在任何地方?你的學生會感到困惑:「x + y」做什麼?「 – askewchan 2013-03-20 21:32:48

+0

其實,我問這個問題的部分原因是看看其他人對這個想法的看法。沒錯,你是對的 - 沒有它就會失去一些東西。如果你們中的任何一個創建了答案,我會將其標記爲已接受。 – WilHall 2013-03-20 21:49:04

回答

1

我知道你沒來這裏教學的意見,但沒有輸出,有什麼x + y該怎麼辦?爲什麼要輸入它,如果你不想把值輸出或存儲在任何地方?

你的學生會感到困惑:「x + y做什麼?」

如果您想要顯示某個表達式,只需將其前面的print聲明一致,或將其分配給一個值。

我發現人們經常會感到困惑,他們不知道return實際上給他們帶來的價值,他們總是想用print。不要忘記,你可以交互地定義函數,並將返回放在那裏。然後,您可以向他們展示該函數返回該值,即使沒有print s。

1

我不認爲你可以配置shell來壓制表達式的結果,但如果你只是將每個表達式賦值給一個變量,它會工作嗎?它不會打印任何東西然後...

E.G.

x=5 
y=7 
z = x+y 
+0

是的,這樣做是因爲空表達式在python腳本中並沒有多大意義。否則'x + y'本身意味着什麼? – askewchan 2013-03-20 21:30:35

5

表達印刷在交互會話經由呼叫介導 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

+0

+1,很好地回答了這個問題,但我認爲它會混淆python學習者。 – askewchan 2013-03-20 21:56:54

+1

我看到OP的觀點,我正在考慮自己在一些課堂上選擇這個。有時很難讓他們理解爲什麼程序中每行的結果不是自己打印的。 – jsbueno 2013-03-20 21:59:34

+1

是的,它確實是雙向的。我認爲,無論你選擇哪種方法,困惑的學習者都是不可避免的。 – askewchan 2013-03-20 22:01:09