2017-03-24 1 views
0

먼저 예를 들어, 사전의 변수로 IPython 블록을 실행하면 :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} 

을 그러나 예를 들어, "_W"에서 "_K"로 결말을 변경하려면 블록을 변경하고 다시 시작할 때 이미 변경된 en으로 이전 변수를 가져옵니다. d + 새 결말 :

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]을 가질 수 있도록 만들 수 있습니까?

답변

2

하자 rename_keys 오히려 이전을 변경하는 대신, 새로운 객체를 반환 :

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

다음 지금 test_dict는 여전히 원래 키가 포함됩니다

renamed = rename_keys(test_dict, '_W') 

처럼 사용합니다.

2

이것은 iPython의 작동 방식입니다. 셀은 문서의 순서가 아니라 실행 순서대로 실행됩니다. 처음부터 다시 실행하려면 cell->Run All Above으로 전화하십시오.

여기에서 철학은 순차 코드를 작성하는 대신 빠른 디버깅/프로토 타입을 수행 할 수 있다는 것입니다.

관련 문제