문제

일부 Python 프로그래머가 다음 스타일을 상당히 일관되게 사용하는 것을 보았습니다 (스타일 1).

import some_module
# Use some_module.some_identifier in various places.

이 스타일을 지원하기 위해 "명시 적은 암시 적보다 낫다" 격언. 다른 프로그래머 가이 스타일을 사용하는 것을 보았습니다 (스타일 2).

from some_module import some_identifier
# Use some_identifier in various places.

내가 스타일 2에서 볼 수있는 주요 이점은 유지 가능성입니다. 오리 타이핑 이상적인 _other_module로 some_module을 교환하고 싶을 수도 있습니다. 나는 또한 스타일 2가 "가독성 계수" 격언. 나는 동의하지 않는 경향이 있지만, 항상 검색과 재구점이 첫 번째 스타일을 사용할 때 마찬가지로 좋은 옵션이라고 주장 할 수 있습니다.

부록: 당신이 사용할 수 있다는 것이 주목되었습니다 as 스위치를 해결합니다 some_module 에게 some_other_module 스타일 1. 나는 구현을 결정하는 것이 일반적이라고 언급하는 것을 잊었다. some_identifier 당신의 현재의 동등한 것으로 만들어진 모듈 some_module 컨테이너는 약간 어색합니다.

도움이 되었습니까?

해결책

두 경우 모두에 용도가 있으므로 이것이 어느 정도 문제라고 생각하지 않습니다. 모듈에서 사용하는 것을 고려할 것입니다 import x,y,z 언제:

  • 수입 할 것이 상당히 적습니다.

  • 수입 된 기능의 목적은 모듈 이름과 이혼 할 때 분명합니다. 이름이 상당히 일반적이면 다른 사람들과 충돌하여 거의 말할 수 없습니다. 예를 들어. 봄 remove 조금 말해 주지만 os.remove 아마도 당신이 파일을 다루고 있다는 것을 암시 할 것입니다.

  • 이름은 충돌하지 않습니다. 위와 유사하지만 더 중요합니다. 절대 다음과 같은 일을하십시오 :

     from os import open
    

import module [as renamed_module] 사용할 때 호출되는 것에 대해 조금 더 많은 맥락을 제공한다는 이점이 있습니다. 모듈이 실제로 더 많은 정보를 제공하지 않을 때 이것이 조금 더 혼란스럽고 성능이 약간 덜 어수선한다는 단점이 있습니다 (1 대신 2 개의 조회).

그러나 테스트 할 때도 장점이 있습니다 (예 : 모든 모듈을 변경할 필요없이 OS.를 모의 객체로 교체 함).

import config
config.dburl = 'sqlite:///test.db'

의심스러운 경우, 나는 항상 함께 갈 것입니다 import module 스타일.

다른 팁

다음 구문의 존재로 :

import some_other_module as some_module

Style 2의 유지 관리 가능성은 더 이상 관련이 없습니다.

나는 스타일을 사용하는 경향이 있습니다. 일반적으로, 나는 일반적인 Python 프로그램에서 수입 패키지 이름을 몇 번만 명시 적으로 참조한다는 것을 알았습니다. 다른 모든 것은 객체의 메소드이며, 물론 가져온 패키지를 참조 할 필요가 없습니다.

나는 보통 임계 값을 사용하여 이것을 결정합니다. 내에서 많은 것을 사용하고 싶다면 some_module, 나는 사용할 것이다 :

import some_module as sm
x = sm.whatever

한두 가지만 있으면 필요한 것입니다.

from some_module import whatever
x = whatever

그것은 내가 필요하지 않다고 가정합니다 whatever ~에서 some_other_module, 물론이야.

나는 사용하는 경향이있다 as 입력을 줄일 수 있도록 가져 오기 조항 그리고 미래에 다른 모듈을 아주 쉽게 대체하십시오.

나는 선호한다 import X 그리고 사용하십시오 X.a 가능한 한 많이.

저의 예외는 Django와 같은 큰 프레임 워크에서 깊게 중첩 된 모듈을 중심으로합니다. 그들의 모듈 이름은 길어지는 경향이 있으며, 그 예는 모두 말합니다. from django.conf import settings 타이핑을 저장합니다 django.conf.settings.DEBUG 어디에나.

모듈 이름이 깊게 중첩 된 경우 예외는 사용하는 것입니다. from X.Y.Z import a.

나는 그 표기법을 발견했다

from some_module import some_symbol

대부분의 경우 가장 잘 작동합니다. 또한 기호에 대한 이름 충돌의 경우 다음을 사용할 수 있습니다.

from some_module import some_symbol as other_symbol

질문에서 알 수 있듯이, 매번 모듈 이름을 다시 쓰는 것을 피합니다. 나는 구문을 사용합니다.

import  module [as other_module]

두 경우에만 :

  1. 너무 많은 모듈 기능/객체를 사용하여 모두 가져옵니다.
  2. 모듈은 실행 중에 변경 될 수있는 일부 기호를 정의합니다.

나는 개인적으로 내 네임 스페이스를 너무 많이 엉망으로 만들지 않으려 고합니다. 그래서 대부분의 상황에서 나는 그냥

import module  

또는 모듈을 모드로 가져옵니다

진짜 차이만이 많이 사용되는 단일 클래스가있는 모듈이있을 때입니다. 내가 서브 클래스를 사용했다면 a list 유형을 입력하여 기능을 추가하려면 사용할 것입니다

from SuperImprovedListOverloadedWithFeatures import NewLIst
nl = NewList()

등.

각 모듈의 멤버 만 사용하는 경향이 있으므로 많은

from john import cleese
from terry import jones, gilliam

내 코드에서. 전체 모듈을 가져 오겠습니다 (예 : os 또는 wx) 대부분의 모듈을 사용하고 모듈 이름이 짧은 경우. 이름 충돌이 있거나 독자에게 해당 함수가 관련된 내용을 상기시키려면 전체 모듈을 가져옵니다.

import michael
import sarah

import wave

gov_speech = wave.open(sarah.palin.speechfile)
parrot_sketch = wave.open(michael.palin.justresting)

(사용할 수 있습니다 from wave import open as wave_open, 그러나 나는 그것을 알아 낸다 wave.open 독자에게 더 친숙 할 것입니다.

나는 최신 버전의 파이썬을 믿습니다 (2.5+? 내 사실을 확인해야합니다 ...) 할 수 있습니다.

import some_other_module as some_module

따라서 스타일 1과 함께 가서 나중에 다른 모듈로 교체 할 수 있습니다.

나는 그것이 일반적으로 당신의 네임 스페이스를 얼마나 혼란스럽게하고 싶은지에 대한지도를 생각합니다. 모듈에서 하나 또는 두 개의 이름을 사용 하시겠습니까? 또는 그들 모두 (from x import * 모두가 나쁘지는 않지만 일반적으로)?

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