programing

importos.path를 사용해야 합니까, importos를 사용해야 합니까?

powerit 2023. 7. 17. 21:30
반응형

importos.path를 사용해야 합니까, importos를 사용해야 합니까?

공식 문서에 따르면,os.path다입듈▁thus다니. 그렇다면,어떤?그렇다면, 어떤 수입 방법이 선호됩니까?

# Should I always import it explicitly?
import os.path

아니면...

# Is importing os enough?
import os

" 져오기에 "".os제게 도움이 됩니다."알아요, 지금 저에게도 잘 작동합니다(파이썬 2.6 기준).제가 알고 싶은 것은 이 문제에 대한 공식적인 권고 사항입니다.그래서 이 질문에 답하시면 추천서를 올려주세요.

os.path재미있는 방식으로 작동합니다.▁like처럼 보입니다.os.path는 그러나실는로제는▁but로.os를 사용하여 마법을 수행하는 일반 모듈입니다.sys.modules를 놓다os.path다음과 같은 상황이 발생합니다.

  • 을 Python에 합니다.sys.modules스크립트의 이름에 바인딩되지는 않지만 이미 만들어진 모듈을 가져올 때 액세스할 수 있습니다.

    • sys.modules모듈이 캐시되는 딕트입니다. 때 을 가져오면 가 져 때 이 해 모 다 듈 저 음 인 스 를 가 니 옵 져 턴 다 스 된 장 에 은 당 경 올 가 우 져 온 로 어 미 가 딘▁storedsys.modules.
  • os는 Python이 시작될 때 로드되는 모듈 중 하나입니다.을 합니다.pathOS별 경로 모듈의 특성입니다.

  • 은 니합다주를 합니다.sys.modules['os.path'] = path 당신이 " 할수있록도당이신"록있"를할 수 .import os.path마치 서브 모듈인 것처럼.

나는 생각하는 경향이 있습니다.os.path모듈에 있는 것보다 사용하고 싶은 모듈로서, 그래서 그것이 실제로는 패키지의 하위 모듈이 아님에도 불구하고.os저는 그것이 그것인 것처럼 그것을 수입하고 항상 그렇게 합니다.이것은 방법과 일치합니다.os.path문서화되어 있습니다.


부수적으로, 이런 종류의 구조는 많은 파이썬 프로그래머들이 모듈, 패키지 및 코드 구성에 대해 초기에 혼란을 일으켰다고 생각합니다.이것은 정말로 두 가지 이유 때문입니다.

  1. 을 하면.os패키지로서 그리고 당신이 할 수 있다는 것을 알고 있습니다.import os인 "Submodule"에 수 .os.path나중에 당신이 할 수 없을 때 놀랄 수도 있습니다.import twisted으로 액세스할 수 있습니다.twisted.spread수입하지 않고.

  2. 그것은 혼란스럽습니다.os.name인 것, 평한것, 끈고, 그리범입니다.os.path듈모항다니입. 나는 빈 상빈패로 합니다.__init__.py동일한 수준에서 항상 한 가지 유형(모듈/패키지 또는 다른 것)을 사용할 수 있도록 파일을 참조하십시오.몇몇 큰 파이썬 프로젝트는 이러한 접근 방식을 취하며, 이는 더 구조화된 코드를 만드는 경향이 있습니다.

Tim Peters의 PEP-20에 따르면, "묵시적인 것이 암시적인 것보다 낫다"와 "가독성이 중요하다".당신이 필요한 것이 있다면,os모듈이 아래에 있습니다.os.path,import os.path당신이 정말로 아끼는 것이 무엇인지를 다른 사람들에게 더 분명하게 알려줄 것입니다.

마찬가지로, PEP-20은 또한 "복잡한 것보다 간단한 것이 낫다"고 말하기 때문에, 만약 당신이 더 일반적인 것 아래에 상주하는 것도 필요하다면.os우산.import os선호할 수 있습니다.

답변: 최종답변:import os 및사를 합니다.os.path하지마import os.path직접적으로.

모듈 자체의 설명서를 참조하십시오.

>>> import os
>>> help(os.path)
...
Instead of importing this module directly, import os and refer to
this module as os.path.  The "os.path" name is an alias for this
module on Posix systems; on other systems (e.g. Mac, Windows),
os.path provides the same operations in a manner specific to that
platform, and is an alias to another module (e.g. macpath, ntpath).
...

흥미롭게도 os.path를 가져오면 모든 os를 가져오게 됩니다. 대화형 프롬프트에서 다음을 시도해 보십시오.

import os.path
dir(os)

결과는 방금 OS를 가져온 것과 동일합니다.이는 os.path가 사용 중인 운영 체제에 따라 다른 모듈을 참조하므로 python이 os를 가져와 경로에 대해 로드할 모듈을 결정하기 때문입니다.

언급

일부 모듈을 사용하여 다음과 같이 말합니다.import foo 노출 안 함foo.bar그래서 특정 모듈의 디자인에 정말로 달려있다고 생각합니다.


일반적으로 필요한 명시적 모듈을 가져오는 것이 조금 더 빨라야 합니다.내 컴퓨터에서:

import os.path: 7.54285810068e-06

import os: 9.21904878972e-06

이 시간들은 꽤 무시해도 될 만큼 충분히 가깝습니다.은 프그램다모사할의 해야 할 .os지금 아니면 나중에, 그래서 보통 2마이크로초를 희생하고 사용하는 것이 이치에 맞습니다.import os나중에 이 오류를 방지할 수 있습니다.를 전체적으로 하는 것에 하지만, 왜 은 os를 선호하는지 알 수.import os.path기술적으로 더 효율적이고 코드의 독자들에게 그것이 유일한 부분이라는 것을 전달하는 것.os모듈을 사용해야 합니다.본질적으로 제 마음속에 스타일 질문으로 요약됩니다.

여기서 합니다: 상은식여작동다니합서기.os이고, 는 모듈입니다.os.path모듈이기도 합니다.사용할 모듈만 가져오면 됩니다.

  • ,osImport한 후 모듈런, 가오다져기음을 가져옵니다.os.

  • ,os.pathImport한 후 모듈런, 가오다져기음을 가져옵니다.os.path.

  • 두 모듈 모두에서 기능을 사용하려면 두 모듈을 모두 가져오십시오.

    import os
    import os.path
    

참조용:

확실한 참조를 찾을 수 없지만 os.walk의 예제 코드는 os.path를 사용하지만 os만 가져오는 것을 알 수 있습니다.

언급URL : https://stackoverflow.com/questions/2724348/should-i-use-import-os-path-or-import-os

반응형