저는 파이썬 스코핑에 대한 이해가 부족한 것 같습니다. 아마도 당신이 도울 수 있습니다."library"메서드의 범위
배경 : 내 모듈 (들)의 "자가 테스트"를 수행하기 위해
if __name__ == "__main__"
구조를 사용하고
. 각 자체 테스트는 모듈을 개발할 때 다양한 공용 메소드를 호출하고 시각적 검사를 위해 결과를 인쇄합니다.
는 것 "퍼디"을 유지하고 관리하기 위해, 나는 방법의 테스트를 단순화하는 작은 방법을 만들었습니다 호출
def pprint_vars(var_in):
print("%s = '%s'" % (var_in, eval(var_in)))
때와
foo = "bar"
호출 pprint_vars :
pprint_vars('foo')
인쇄물 :
foo = 'bar'
모두 좋고 좋습니다.
문제 문 : 그냥 키스 행복하지
, 나는 'debug_tools.py'라는 별도의 파일로 내 편리한 - 멋쟁이 'pprint_vars'방법을 이동하고 간단하게 가져올 수있는 뇌 이슬비가 있었다 'debug_tools'내가 원하는 때마다 'pprint_vars'에 대한 액세스.
여기가 사별됩니다. 내가
import debug_tools
foo = bar
debug_tools.pprint_vars('foo')
은 마법과 인쇄 작업을 계속 기대 :
NameError: name 'some_var' is not defined
불합리한 신념 : 대신
foo = 'bar'
를, 그것은 나를 맞이
내가 생각 (분명히 실수) import는 가져온 메소드를 코드와 "인라인"(inline) 넣습니다. 따라서 변수 범위 지정 규칙은 메소드가 인라인으로 정의되었습니다.
도움을 주셔서 감사합니다.
누군가 내 범위 조정에 대한 이해를 잘못 교정 할 수 있습니까?
덕분에, JS
정확히 동일한 코드를 올렸습니까? 'foo ='bar ''가 아닌가? 그리고 오류 메시지에서''some_var ''을 찾을 수 없습니다. –
당신이 맞습니다, 펠릭스. 내 사과. 나는 (잘하면) 오류를 정정했다. –
'__name__' 관용어는 대개 '__name__' == "__main__":'으로 작성되며 동등성을 테스트합니다. 그것은 __in__ 연산자를 사용하는 것처럼 작동합니다. 포함 시키려고 테스트하지만 우연히 발생합니다. – Todd