この例を見てみましょう:
>>> 5+10
15
>>> a = 5 + 10
>>> a
15
Pythonが明示的な印刷ステートメントなしでこれを行う方法と理由は?
IPython セルで同じことを行うと、実際にはこのような最後の値のみが次のようにstdoutに出力されます。
In[1]: 5+10
1
Out[1]: 1
なぜこれが起こるのですか?
Pythonが「インタラクティブ」モードの場合、非インタラクティブモードにはない特定の動作を有効にします。たとえば、最初は sys.displayhook
PEP 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の間で異なる動作が見られます。
それがすべての通訳者が働く方法です。 print
は必要ありませんが、print
がないと、すべてのrepr
を実行しますが、print
には必要ありません。例:
>>> 'blah'
'blah'
>>> print('blah')
blah
>>>
引用符を見てください。
これも見てください:
>>> print(repr('blah'))
'blah'
>>>
repr
も同じです。