Eu perguntei no SO e reproduzo aqui. Um notebook com duas células:
Em 1]
import numpy as np
import matplotlib.pyplot as plt
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all";
Em 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);
não suprime a saída de plt.hist()
:
Saída 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)]'}
Você configurou InteractiveShell.ast_node_interactivity = "all";
, então configurou todos os nós para ter a interatividade ativa ativada.
E ;
funciona apenas para a última expressão de nível superior , axes[idx].hist(data[k], bins=20);
não é um nível superior, pois está aninhado em for
, o último nó de nível superior é for
, que é uma declaração.
Basta adicionar uma última instrução autônoma e finalizá-la com ;
%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;
E você não terá nenhuma saída.
@Carreau Obrigado pelo esclarecimento!
Não consegui encontrar sobre:
E ; funciona apenas para a última expressão de nível superior
Isso está documentado em algum lugar? Gostaria de copiar e colar sua resposta no SO, para que eu possa aceitá-la?
Isso está documentado em algum lugar?
Provavelmente não, a opção ast_interactivity
é tão raramente usada que realmente não nos importamos com a distinção, já que _a maioria_ dos casos de uso são apenas para a última expressão.
Gostaria de copiar e colar sua resposta para que eu possa aceitá-la?
Já fiz, com alguns outros detalhes :-)
Comentários muito úteis
Você configurou
InteractiveShell.ast_node_interactivity = "all";
, então configurou todos os nós para ter a interatividade ativa ativada.E
;
funciona apenas para a última expressão de nível superior ,axes[idx].hist(data[k], bins=20);
não é um nível superior, pois está aninhado emfor
, o último nó de nível superior éfor
, que é uma declaração.Basta adicionar uma última instrução autônoma e finalizá-la com
;
E você não terá nenhuma saída.