2011-01-25 5 views
3

저는이 글을 처음 보았고이 질문을하는 방법을 100 % 확신하지 않기 때문에 바로 들어가기 시작합니다. 필자가 작성한 모든 함수의 시작 부분에 import 문을 사용해야합니까? 해당 함수의 범위에 필요한 다양한 모듈/함수를 모두 가져옵니다. 즉Python에서 가져온 모듈/함수의 범위

def func1() 
    import os.path 
    print func(2) 
    do something with os.path 

def func2() 
    import os.path 
    do something with os.path 

윌이 증가 메모리 오버 헤드, 또는 다른 오버 헤드, 또는 import 문은 단지 이미로드 된 객체에 로컬 이름을 매핑한다? 이 작업을 수행하는 더 좋은 방법이 있습니까? (자습서 등으로의 링크 대부분 환영합니다. 잠시 동안 찾았지만 이에 대한 좋은 대답을 찾을 수 없습니다.)

+0

이것은 복제입니다. 첫 번째 검색. 둘째. 'timeit'을 사용하십시오. 그럼 당신은 대답은 각 기능에 가져 오기 시간을 낭비하지 않는 것을 알게 될 것입니다. –

+0

가능한 [python 가져 오기 코딩 스타일] (http://stackoverflow.com/questions/477096/python-import-coding-style) –

+2

@S. Lott. 그 질문에 대한 topvoted 대답은 기술적으로 잘못되었습니다. 나는 그것에 새로운 것을 추가했다. 문제는 사용 된 타이밍 기술이 매우 결함이 있으며 로컬 액세스 및 글로벌 액세스 간의 비용 차이를 고려하지 않는다는 것입니다. – aaronasterling

답변

6

모듈은 처음 가져올 때만 처리됩니다. 후속 가져 오기는 로컬 범위에 대한 참조 만 복사합니다. 그러나 가능한 한 모듈 맨 위에서 가져 오는 것이 가장 좋습니다. 자세한 내용은 PEP 8을 참조하십시오.

+0

답변을 주셔서 감사합니다. 정확히 알고 싶었습니다! 낭비 할 때마다 유감스럽게 생각합니다. 나는 시간이 뭔지 모르지만 알아낼거야. 건배! – GlenS

+0

그리고 PEP 8에 대한 포인터를 보내 주셔서 감사합니다. – GlenS

+0

@GlenS : PEP8을 배우십시오. 조속히 일을할수록 코드가 다른 파이썬 코더들처럼 보이게됩니다. – mlissner

10

Usually 모든 가져 오기는 파일의 시작 부분에 있습니다. 함수 본문에서 모듈을 가져 오는 경우 import 해당 범위의 모듈 만 해당됩니다.

def f(): 
    import sys 
    print 'f', sys.version_info 

def g(): 
    print 'g', sys.version_info 

if __name__ == '__main__': 
    f() # will work 
    g() # won't work, since sys hasn't been imported into this modules namespace