Ipython: Semikolon wird beim Plotten nicht unterdrückt

Erstellt am 12. Sept. 2017  ·  3Kommentare  ·  Quelle: ipython/ipython

Ich habe auf SO gefragt und hier reproduziert. Ein Notebook mit zwei Zellen:

In 1]

import numpy as np
import matplotlib.pyplot as plt
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all";

In 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);

unterdrückt nicht die Ausgabe von plt.hist() :
screen shot 2017-09-12 at 20 43 35

Ausgabe von 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)]'}

Hilfreichster Kommentar

Sie haben InteractiveShell.ast_node_interactivity = "all"; , also haben Sie alle Knoten so eingestellt, dass die erste Interaktivität aktiviert ist.

Und ; funktioniert nur für den letzten Top-Level- Ausdruck, axes[idx].hist(data[k], bins=20); ist kein Top-Level, da es in for verschachtelt ist, der letzte Top-Level-Knoten ist for , was eine Aussage ist.

Fügen Sie einfach eine letzte No-Op-Anweisung hinzu und beenden Sie sie mit ;

%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;

Und Sie haben keine Ausgänge.

Alle 3 Kommentare

Sie haben InteractiveShell.ast_node_interactivity = "all"; , also haben Sie alle Knoten so eingestellt, dass die erste Interaktivität aktiviert ist.

Und ; funktioniert nur für den letzten Top-Level- Ausdruck, axes[idx].hist(data[k], bins=20); ist kein Top-Level, da es in for verschachtelt ist, der letzte Top-Level-Knoten ist for , was eine Aussage ist.

Fügen Sie einfach eine letzte No-Op-Anweisung hinzu und beenden Sie sie mit ;

%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;

Und Sie haben keine Ausgänge.

@Carreau Danke für die Klarstellung!

Ich konnte nichts finden über:

Und ; funktioniert nur für den letzten Top-Level-Ausdruck

Ist das irgendwo dokumentiert? Möchten Sie Ihre Antwort in SO kopieren und einfügen, damit ich sie akzeptieren kann?

Ist das irgendwo dokumentiert?

Wahrscheinlich nicht, die Option ast_interactivity wird so selten verwendet, dass wir uns nicht wirklich mit der Unterscheidung beschäftigen, da _most_ Anwendungsfälle nur für den letzten Ausdruck gelten.

Möchten Sie Ihre Antwort kopieren und einfügen, damit ich sie akzeptieren kann?

Schon getan, mit ein paar anderen Details :-)

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen