web-dev-qa-db-ja.com

変数(または式)を入力すると、値がstdoutに出力されるのはなぜですか?

この例を見てみましょう:

>>> 5+10
15
>>> a = 5 + 10
>>> a
15

Pythonが明示的な印刷ステートメントなしでこれを行う方法と理由は?

IPython セル​​で同じことを行うと、実際にはこのような最後の値のみが次のようにstdoutに出力されます。

In[1]: 5+10
       1

Out[1]: 1

なぜこれが起こるのですか?

17
Chayan Ghosh

Pythonが「インタラクティブ」モードの場合、非インタラクティブモードにはない特定の動作を有効にします。たとえば、最初は sys.displayhookPEP 217 で指定されます。

値がNoneでない場合、この関数はそれをsys.stdoutに出力し、__builtin__._に保存します。

sys.displayhookは、インタラクティブPythonセッションで入力された式を評価した結果で呼び出されます。

この動作は変更できます。

>>> import sys
>>> def shook(expr):
...   print(f'can haz {expr}?')
...
>>> sys.displayhook = shook
>>> 123
can haz 123?
>>> False
can haz False?
>>> None
can haz None?

そして、それを通常に戻します:

>>> sys.displayhook = sys.__displayhook__
>>> 3
3

デフォルトではPython repl、sys.displayhook

>>> import sys;
>>> sys.displayhook
<built-in function displayhook>

iPythonでは

In [1]: import sys

In [2]: sys.displayhook
Out[2]: <IPython.terminal.prompts.RichPromptDisplayHook at 0x7f630717fa58>

そのため、PythonとIPythonの間で異なる動作が見られます。

35
kojiro

それがすべての通訳者が働く方法です。 printは必要ありませんが、printがないと、すべてのreprを実行しますが、printには必要ありません。例:

>>> 'blah'
'blah'
>>> print('blah')
blah
>>> 

引用符を見てください。

これも見てください:

>>> print(repr('blah'))
'blah'
>>> 

reprも同じです。

2
U10-Forward