2016-11-17 1 views
0

는이 같은 부모/통역 전역 (주장, 검증)에서 변수를 조작 할 필요가있는 서브 모듈의 기능을 가지고 : 나는 이렇게 할 경우상위 모듈의 Globals()에 하위 모듈로 액세스하는 방법은 무엇입니까?

import mymodule 
mymodule.fun_using_main_interpreter_globals1() 

, 그것을 작동 :

mymodule.fun_using_main_interpreter_globals1(explicit_pass= globals()) 

하지만 explictely globals()를 전달하지 않으면 인터프리터/부모 전역()에 대한 액세스 권한을 하위 모듈에 어떻게 얻을 수 있습니까?

IPython에서는 프로필 설정에 넣을 수 있습니다.

+0

이것은 이미 분명 할 수도 있지만 다른 사람이이 질문을 읽는 경우 : 다른 모듈의 전역 수정은 일반적으로 좋지 않습니다. 이것을 원한다고 생각한다면, 한 발 뒤로 물러나서 이것을 포함하지 않는 문제를 해결할 방법을 생각하십시오. 모듈이 자유롭게 가서 서로 바꿀 수 있다면 코드가하는 것을 따라하기 란 어렵습니다. –

+0

게시자는 부모 호출자의 Globals()에 액세스 할 것을 언급하고, globals()를 수정하는 것과는 관계가 없습니다 ..... Globals()에 액세스 할 때 사례/문제를 생각해보십시오. (다른 방법 없음) 필요합니다. –

답변

0

나는이 지역에서 진짜 가본 적이 있지만, at the documentation보고이 그것을 수행해야합니다

caller_globals = dict(inspect.getmembers(inspect.stack()[1][0]))["f_globals"] 

inspect 모듈은, 무엇보다도, 액세스 파이썬 인터프리터 스택을 수행 할 수 있습니다. 두 번째 요소 ([1]으로 액세스)는 호출자이며 스택 프레임은 ([0]으로 액세스 한) 튜플의 첫 번째 요소이며 해당 컨텍스트 (이름이 f_globals)에 대한 현재 전역 사전이 멤버로 포함되어 있습니다.

호출 된 함수가 하위 모듈 인 모듈이 아닌의 globals()을 반환한다는 점에 유의하십시오. 일반적으로 나는 동일한 모듈이 다른 모듈의 하위 모듈이 될 수 있기 때문에 불가능하다고 생각합니다 (하위 모듈은 모듈의 전역이며 다른 모듈이 동일한 하위 모듈 객체를 공유 할 수도 있습니다).

+0

inspect는 호출 방식에서 트리 의존성을 얻기위한 올바른 도구를 가지고 있다고 들립니다. –

관련 문제