首次使用带字典的变量运行IPython块时,例如:
In[7]: test_dict = {'key_1': 1.8529757571664867,
'key_2': 1.551270403313663,
'key_3': 0.8213399558579995}
和功能:
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将打印预期结果:
Out[9]: {'key_1_W': 1.8529757571664867,
'key_2_W': 1.551270403313663,
'key_3_W': 0.8213399558579995}
但是,例如,如果我想改变#34; _W"到" _K",然后当我改变并重新启动块时,我得到了已经改变的结束+新结尾的旧变量:
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}
如何从头开始编写记事本运行代码?
当然,后来的调用意味着已经更改过的对象是合乎逻辑且显而易见的,但我是否可以这样做,以便在
In [9]
中更改它时,我有输出Out [9]
?
答案 0 :(得分:2)
让rename_keys返回一个新对象,而不是更改旧对象:
def rename_keys(inp_dict, add):
return {key + add: value for key, value in inp_dict.items()}
然后像
一样使用它renamed = rename_keys(test_dict, '_W')
现在test_dict
仍会包含原始密钥。
答案 1 :(得分:2)
这就是iPython的工作原理。单元格按照您运行它们的顺序执行 - 而不是按文档中的顺序执行。如果您想从头开始重新运行,可以致电cell->Run All Above
。
这里的理念是能够进行快速调试/原型设计,而不是编写顺序代码。