2017-03-24 4 views
0

Lorsque vous exécutez le bloc IPython avec une variable avec un dictionnaire, par exemple:Comment puis-je ne pas mettre en cache les variables IPython?

In[7]: test_dict = {'key_1': 1.8529757571664867, 
        'key_2': 1.551270403313663, 
        'key_3': 0.8213399558579995} 

et la fonction:

In[8]: def rename_keys(inp_dict, add): 
      for k, v in sorted(inp_dict.items()): 
       inp_dict[k + add] = inp_dict.pop(k) 
      return inp_dict 

In[9]: rename_keys(test_dict, '_W') 

IPython imprimera le résultat attendu:

Out[9]: {'key_1_W': 1.8529757571664867, 
     'key_2_W': 1.551270403313663, 
     'key_3_W': 0.8213399558579995} 

Mais, par exemple, si je voulais changer la fin de "_W" en "_K", alors quand je change et redémarre le bloc, j'obtiens l'ancienne variable avec le déjà changé d + nouvelle fin:

In[10]: rename_keys(test_dict, '_K') 

Out[10]: {'key_1_W_K': 1.8529757571664867, 
      'key_2_W_K': 1.551270403313663, 
      'key_3_W_K': 0.8213399558579995} 

Comment faire pour exécuter un bloc-notes à partir de zéro?

Bien sûr, il est logique et évident que les appels suivants signifient un objet déjà changé, mais puis-je faire en sorte que quand je change dans In [9] J'ai la sortie Out [9]?

Répondre

2

Laissez rename_keys retourner un nouvel objet, plutôt que de changer l'ancien:

def rename_keys(inp_dict, add): 
    return {key + add: value for key, value in inp_dict.items()} 

utiliser ensuite comme

renamed = rename_keys(test_dict, '_W') 

maintenant test_dict contient toujours les clés originales.

2

Voici comment iPython fonctionne. Les cellules s'exécutent dans l'ordre dans lequel vous les exécutez, et non dans l'ordre du document. Vous pouvez appeler le cell->Run All Above si vous voulez recommencer à zéro.

La philosophie ici est d'être capable de faire un débogage/prototypage rapide, plutôt que d'écrire un code séquentiel.