문제

다음과 같은 구조가 있다고 가정합니다.

app/
  __init__.py
  foo/
    a.py
    b.py
    c.py
    __init__.py

a.py, b.py 및 c.py는 몇 가지 공통 가져오기(logging, os, re 등)를 공유합니다.이 3개 또는 4개의 공통 모듈을 다음에서 가져올 수 있습니까? __init__.py 파일을 저장하므로 모든 파일에서 가져올 필요가 없나요?

편집하다:내 목표는 각 파일에서 5-6개의 모듈을 가져오지 않는 것이며 성능상의 이유와는 관련이 없습니다.

도움이 되었습니까?

해결책

아니요, 각 모듈의 네임스페이스에 배치해야 하므로 어떻게든 가져와야 합니다(합격하지 않는 한). logging 함수 인수로 사용하는데, 이는 최소한 일을 수행하는 이상한 방법이 될 것입니다).

그러나 모듈은 어쨌든 한 번만 가져옵니다. a, b, 그리고 c 네임스페이스)를 사용하므로 너무 많은 메모리를 사용하는 것에 대해 걱정하지 마세요.

물론 별도의 모듈에 넣고 가져올 수도 있습니다. 저것 각각에 a, b, 그리고 c, 하지만 이 별도의 모듈은 여전히 ​​매번 가져와야 합니다.

다른 팁

다음과 같은 공통 파일을 사용 하여이 작업을 수행 할 수 있습니다. include.py, 그러나 와일드 카드 수입이 포함되어 있기 때문에 권장 관행에 위배됩니다. 다음 파일을 고려하십시오.

app/
    __init__.py
foo/
    a.py
    b.py
    c.py
    include.py <- put the includes here.
    __init__.py

지금에 a.py, 등 : DO :

from include import *

위에서 언급 한 바와 같이, 와일드 카드 내포는 권장되지 않기 때문에 권장되지 않습니다.

네,하지만 하지 마십시오. 진심으로,하지 마십시오. 그러나 여전히 어떻게하는지 알고 싶다면 다음과 같이 보일 것입니다.

import __init__

re = __init__.re
logging = __init__.logging
os = __init__.os

나는 지저분하고 무의미하기 때문에 그렇게하지 않겠다고 말하며, 패키지가 실제로 사용해서는 안되기 때문에 __init__.py 그렇게. 패키지 초기화 코드입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top