2016-11-19 2 views
0

다른 모듈에서 가져 와서 사용하는 모듈을 다시로드하는 데 문제가 있습니다. 선명도를 들어, 나는 두 개의 모듈을 가지고있는 예를 살펴 보자다른 모듈로 가져온 모듈을 다시로드하는 방법

첫 번째 모듈 : operation.py

def f(x,y): 
    return x+y 

두 번째 모듈 : test_operation.py

import operation 
x=3 
y=4 
z= operation.f(x,y) 
print z 

내가 통역으로 이동하는 경우와 쓰기 :

import test_operation 

4 개의 문자가 인쇄됩니다 (z = 4). 내가 처음 모듈 operation.py에서 함수 f를 변경하는 경우로 :

def f(x,y): 
    return x+y+1 

다음 내가 인터프리터를 다시로드 (test_operation)에 쓰기, 나는 아직도 4 그것은 것을 다음 보인다 5. 대신 인쇄 얻을 것이다 test_operation.py 모듈을 다시로드하지만 test_operation.py에서 가져온 모듈 인 operational.py를 다시로드하지 않습니다.

어떻게 이러한 문제를 해결할 수 있습니까? 그리고 일반적으로 코드에서 가져온 모든 모듈이 변경 될 때마다 다시 가져 오기 (또는 다시로드)되도록하려면 어떻게해야합니까? 인터프리터에서

+0

'reload (operation)', 그리고'reload (test_operation)'을 사용하십시오. – Uriel

+0

당신은 이미 가져온 모듈을 메모리에 다시로드합니다. 편집을 통해 새 모듈을 만들지 마십시오. –

+0

저는 모듈을 직접 하나씩 다시로드 할 수 있다는 것을 알고 있지만, 모듈을 다시로드하는 더 자동적 인 방법이 있습니다. 모든 가져온 모듈을 재귀 적으로 사용합니까? 깊은 재로드가 있습니까 (예 : 복사본과 전체 복사본이 있습니까?)? –

답변

0

: 단지 전체 경로를 사용하여 test_operation 모듈의 컨텍스트 내에서 operation를 다시로드 : test_operation.py에서

reload(test_operation.operation) 

을, 당신은 부를 수 reload(operation) 그래서 test_operation도 여기에 전체 재귀 다시로드 체크를 위해 operation

를 다시 것 다시로드 (좋은 생각이 아닌지 ...) : Recursive version of 'reload'

+0

예, 실제로 당신이 말한 것은 작동합니다. 또한 재귀 적 재로드를 위해 공유 한 링크를 확인했는데, 이것은 재구성 된 재귀 함수로 작성되었습니다. 나는 다시로드해야하는 많은 모듈이 있고, 같은 모듈이 다시로드되어야하는 다른 모듈을 임포트하기 때문에, 재로드와 같은 내장 메소드가 있다고 생각합니다. 수동으로 수행하는 것은 느린 프로 시저 일 수 있습니다. 재귀 적 재로드가 좋은 생각이 아니라고 생각하는 이유는 무엇입니까? –

+0

모든 것을 다시로드하면 속도가 느려질 수 있습니다. –

+0

예, 이해하지만 기본 제공 기능이 있습니까? 재 장전 하시겠습니까? (따라서 복사 및 deepcopy가 제공하는 것과 유사합니다) –

관련 문제