J'ai demandé sur SO et reproduit ici. Un cahier avec deux cellules :
En 1]
import numpy as np
import matplotlib.pyplot as plt
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all";
En 2]
%matplotlib inline
data ={'first':np.random.rand(100),
'second':np.random.rand(100)}
fig, axes = plt.subplots(2)
for idx, k in enumerate(data):
axes[idx].hist(data[k], bins=20);
ne supprime pas la sortie du plt.hist()
:
Sortie de python -c "import IPython; print(IPython.sys_info())"
{'commit_hash': 'd86648c5d',
'commit_source': 'installation',
'default_encoding': 'UTF-8',
'ipython_path': '/Users/okomarov/anaconda/lib/python3.6/site-packages/IPython',
'ipython_version': '6.1.0',
'os_name': 'posix',
'platform': 'Darwin-16.7.0-x86_64-i386-64bit',
'sys_executable': '/Users/okomarov/anaconda/bin/python3',
'sys_platform': 'darwin',
'sys_version': '3.6.2 |Anaconda custom (x86_64)| (default, Jul 20 2017, '
'13:14:59) \n'
'[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)]'}
Vous avez défini InteractiveShell.ast_node_interactivity = "all";
, vous avez donc défini tous les nœuds pour que l'interactivité soit activée.
Et ;
ne fonctionne que pour la dernière expression de niveau supérieur , axes[idx].hist(data[k], bins=20);
n'est pas un niveau supérieur, car il est imbriqué dans le for
, le dernier nœud de niveau supérieur est le for
, qui est une déclaration.
Ajoutez simplement une dernière instruction no-op et terminez-la par ;
%matplotlib inline
data ={'first':np.random.rand(100),
'second':np.random.rand(100)};
fig, axes = plt.subplots(2);
for idx, k in enumerate(data):
axes[idx].hist(data[k], bins=20)
pass;
Et vous n'aurez aucune sortie.
@Carreau Merci pour la précision !
Je n'ai pas trouvé sur :
Et ; ne fonctionne que pour la dernière expression de niveau supérieur
C'est documenté quelque part ? Souhaitez-vous copier-coller votre réponse dans SO, afin que je puisse l'accepter ?
C'est documenté quelque part ?
Probablement pas, l'option ast_interactivity
est si rarement utilisée que nous ne nous soucions pas vraiment de la distinction car _la plupart_ des cas d'utilisation ne concernent que la dernière expression.
Souhaitez-vous copier-coller votre réponse afin que je puisse l'accepter ?
Déjà fait, avec quelques autres détails :-)
Commentaire le plus utile
Vous avez défini
InteractiveShell.ast_node_interactivity = "all";
, vous avez donc défini tous les nœuds pour que l'interactivité soit activée.Et
;
ne fonctionne que pour la dernière expression de niveau supérieur ,axes[idx].hist(data[k], bins=20);
n'est pas un niveau supérieur, car il est imbriqué dans lefor
, le dernier nœud de niveau supérieur est lefor
, qui est une déclaration.Ajoutez simplement une dernière instruction no-op et terminez-la par
;
Et vous n'aurez aucune sortie.