2017-10-19 12 views
1

Existe-t-il un moyen plus simple d'afficher le nom et la valeur de toutes les variables définies dans une seule cellule de manière élégante?Imprimer toutes les variables définies dans une cellule Jupyter

La façon dont je fais est maintenant comme ça, mais je gaspille beaucoup de temps quand il y a 30 variables ou plus:

enter image description here

+2

Vous devez publier votre code à la place des fichiers image. –

Répondre

2

Vous pouvez utiliser whos commande pour voir toutes les variables stocké dans le noyau actuel.

k, g, lx = .4, .8, 6.6 
m = k*g*lx**2 
whos 

sorties:

Variable Type  Data/Info 
----------------------------- 
g   float 0.8 
k   float 0.4 
lx   float 6.6 
m   float 13.939200000000001 

Mais comme dit, il affiche toutes les variables, il affiche d'autres variables de cellules antérieures que vous avez lancé.

Un résultat similaire peut être obtenu en utilisant la commande locals() ou globals() à partir de fonctions intégrées python, qui renvoient un dictionnaire de variables. Mais la façon dont Jupyter représente est plus jolie.


Vous pouvez également utiliser InteractiveShell. Cela changera le comportement des cellules et agira comme un shell python, donc il sortira every called value (pour sortir la cellule) une fois exécuté.

from IPython.core.interactiveshell import InteractiveShell 
InteractiveShell.ast_node_interactivity = "all" 

k 
g 
... do stuff ... 
lx 
m 
... do more stuff ... 

sorties:

Out[2]: 0.4 
Out[2]: 0.8 
Out[2]: 6.6 
Out[2]: 13.939200000000001 

Et enfin, vous pouvez retourner l'interactivité par défaut en mettant à last_expr.

InteractiveShell.ast_node_interactivity = "last_expr" 

Mais la façon dont vous le faites est probablement la façon la plus facile et la plus jolie, vous pouvez simplement supprimer l'affectation sur dataframe pour en faire une seule ligne ou vous pouvez le rendre plus compact appeler par:

k, g, lx, m 

Out[3]: (0.4, 0.8, 6.6, 13.939200000000001) 
+1

Merci pour la réponse détaillée! –

2

Vous pouvez essayer quelque chose comme ceci en utilisant la bibliothèque inspect.

import inspect 

k = 0.0417 
g = 0.829 
lx = 6.6 
m = k*g*lx**2 

def get_name(lst=[]): 
    local_vars = inspect.currentframe().f_back.f_locals.items() 
    for i in local_vars: 
     lst.append(i) 
    return dict(lst) 

import pandas as pd 

df = pd.DataFrame(get_name(), index=[0]) 
result = df.T.loc[df.dtypes != object] 
print(result) 
      0 
g  0.829 
k  0.0417 
lx 6.6 
m  1.50584 
+0

Merci, mais je reçois une erreur. J'ai copié et collé le code exact et il donne: La forme des valeurs passées est (30, 2), les indices impliquent (30, 1) –