2012-11-27 2 views
1

아직 내 질문과 같이 겉으로보기에는 단순한 것들을 테스트하고 프로파일 링하기위한 도구를 가지고 있거나 개발하거나 사용하는 방법을 알고있는 수준이 아닙니다.루핑 된 루프 가져 오기 기능에서 모듈 가져 오기가 실행됩니까?

나는 조건을 검사하고 그 조건에 따라 (다른 모듈과) 함께 작동하는 최상의 수학 도구를 선택하지만이 함수는 배열의 창에 적용되므로 반복됩니다. 창마다 다른 수입이 발생할 수 있습니다. 그러나 이것은 수입이 실제로 반복되고 있는지, 그리고 이것이 성능상의 문제인지 궁금합니다. 여기

는하기 matplotlib 소스 루프 대체 개폐 도면 I마다 다른 반복을 가져올 경우 시간

def pause(interval): 
    """ 
    Pause for *interval* seconds. 

    If there is an active figure it will be updated and displayed, 
    and the GUI event loop will run during the pause. 

    If there is no active figure, or if a non-interactive backend 
    is in use, this executes time.sleep(interval). 

    This can be used for crude animation. For more complex 
    animation, see :mod:`matplotlib.animation`. 

    This function is experimental; its behavior may be changed 
    or extended in a future release. 

    """ 
    backend = rcParams['backend'] 
    if backend in _interactive_bk: 
     figManager = _pylab_helpers.Gcf.get_active() 
     if figManager is not None: 
      canvas = figManager.canvas 
      canvas.draw() 
      show(block=False) 
      canvas.start_event_loop(interval) 
      return 

    # No on-screen figure is active, so sleep() is all we need. 
    import time 
    time.sleep(interval) 

의 일례이다? 또는 가져 오기를 처음 호출 할 때 가져온 것이고 이후 가져 오기가 무시됩니까?

감사 import

+0

이것은 바보 같은 질문 일 것임에 틀림 없다. 나는 captcha가 두 번 상영되었고, 틀린 것을 처음으로 입력했다. T_T – arynaq

답변

5

성공적으로 가져온 모듈은 sys.modules에 캐시 완료된 이후 import 문은 sys.modules에서 모듈 그래서 모듈을 다시 가져올 수 없습니다 찾을 수 있습니다. reload 내장 기능을 사용하여 모듈을 다시 가져 오게 할 수 있습니다. the documentation에서

:

수입 검색 중 확인 첫 번째 장소는 sys.modules입니다. 이 매핑은 중간 경로를 포함하여 이전에 가져온 모든 모듈의 캐시 역할을합니다. 따라서 foo.bar.baz을 이전에 가져온 경우 sys.modules에는 foo, foo.barfoo.bar.baz에 대한 항목이 포함됩니다.

PEP 8 (파이썬 스타일 가이드)은 가져 오기가 메소드 내에서가 아니라 파일의 맨 위에 있어야한다고 권장합니다. ("늦은 임포트"를주는)이 규칙을 위반하는 유효한 이유는 모듈 임포트가 비싸고 프로그램에서 거의 사용되지 않는 경우 (일반적인 실행에서는 전혀 사용되지 않는 경우) 또는 순환 임포트 의존성을 해결하는 경우입니다 모듈 기능을 더 잘 분할하여 순환 성을 해결하려고 시도해야하는 경우). time과 같은 모듈의 경우 Python에 내장되어 있으므로 늦은 가져 오기를 사용할 이유가 거의 없습니다.

+0

이것은 많은 의미를 가지며, 빨리 고마워했다. :) – arynaq

1

import의 실제 작업은 한 번만 발생하므로 다시 가져올 때 명시 적으로 reload으로해야합니다. - 인터프리터는 이미 가져 왔는지 확인합니다.

하지만 모듈 상단에 모든 가져 오기를 넣는 것이 일반적으로 더 많습니다. pythonic입니다.