Why does typing a variable (or expression) print the value to stdout?

  • A+

Take this example:

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

How and why does Python do this without an explicit print statement?

If I do the same thing in an IPython cell, only the last such value is actually printed on stdout in this way:

In[1]: 5+10        1  Out[1]: 1 

Why does this happen?


When Python is in "interactive" mode, it enables certain behaviors it doesn't have in non-interactive mode. For example, sys.displayhook, originally specified in PEP 217.

If value is not None, this function prints it to sys.stdout, and saves it in __builtin__._.

sys.displayhook is called on the result of evaluating an expression entered in an interactive Python session.

You can modify this behavior:

>>> 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? 

And also set it back to normal:

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

In the default Python repl, sys.displayhook is

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

but in IPython it's

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

So that's why you see different behavior between Python and IPython.


:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: