Prenez cet exemple:
>>> 5+10
15
>>> a = 5 + 10
>>> a
15
Comment et pourquoi Python fait-il cela sans instruction d'impression explicite?
Si je fais la même chose dans une cellule IPython , seule la dernière de ces valeurs est imprimée sur stdout de cette manière:
In[1]: 5+10
1
Out[1]: 1
Pourquoi cela arrive-t-il?
Lorsque Python est en mode "interactif", il active certains comportements qu'il n'a pas en mode non interactif. Par exemple, sys.displayhook
, initialement spécifié dans PEP 217 .
Si la valeur n'est pas None, cette fonction l'imprime dans sys.stdout et l'enregistre dans
__builtin__._
.sys.displayhook est appelé sur le résultat de l'évaluation d'une expression entrée dans une session interactive Python.
Vous pouvez modifier ce comportement:
>>> 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?
Et aussi le ramener à la normale:
>>> sys.displayhook = sys.__displayhook__
>>> 3
3
Par défaut Python repl, sys.displayhook
est
>>> import sys;
>>> sys.displayhook
<built-in function displayhook>
mais dans IPython c'est
In [1]: import sys
In [2]: sys.displayhook
Out[2]: <IPython.terminal.prompts.RichPromptDisplayHook at 0x7f630717fa58>
C'est pourquoi vous voyez un comportement différent entre Python et IPython.
C'est ainsi que fonctionnent tous les interprètes. Ils n'ont pas besoin de print
, mais une chose, et sans print
ils font le repr
de tout, et print
pas, par exemple:
>>> 'blah'
'blah'
>>> print('blah')
blah
>>>
Regardez les citations.
Voir aussi ceci:
>>> print(repr('blah'))
'blah'
>>>
repr
fait de même.