2017-10-18 1 views
1

비교적 작고 읽기 쉬운 코드를 만들 때 "import as"을 사용할 수 있는지 궁금합니다. 나는 이름 충돌을 무효화하는 것과 같은 PEP을 기반으로하는 일반적인 사용 사례를 알고 있습니다."import as"for Python 사용 사례

여기 상황이 있습니다 (데모 목적으로 매우 간단하게 유지). 모듈 이름이 process_words.py라고 가정 해 봅시다.

process_words.py :

def word_to_lower(word): 
    return word.lower 

process_article.py은 (주 스크립트를 할 수 있습니다) :

import process_words 

word = "HELLO" 
word_lower = process_words.word_to_lower(word) 
print(word_lower) 

을 지금은이

을? : 같은 것을 할 수있는 나쁜 또는 좋은 연습이 될 것이다
import process_words as pw 

word = "HELLO" 
word_lower = pw.word_to_lower(word) 
print(word_lower) 

매우 단순한 예입니다. 각 모듈에는 몇 가지 기능이있는 두 개의 모듈이 있습니다. from module import something으로 각 기능을 가져 오는 것은 선택할 수 없습니다. 필자는 일부 바로 가기 이름으로 가져 오기를 사용하면 코드 가독성이 향상됩니다. 이견있는 사람?

참고 : 여기서 맞춤 모듈을 언급하고 있습니다.

+0

개인적으로 나는 'as'로 import의 이름을 바꾸는 것을 좋아하지 않습니다. 그러나 때로는 같은 이름의 두 객체를 하나의 네임 스페이스로 가져 오려는 경우에 필요합니다. –

+1

최선의 판단을 사용하십시오. 만약 당신이 매우 자주 사용되는 것을 가지고 있다면 짧은 별명을 만드는 것이 도움이 될 수 있습니다 (예를 들어, SQLAlchemy로 작업 할 때'sqlalchemy를 sa로 임포트하는 것이 일반적입니다).하지만 별명이 너무 많으면 기억하기가 어려울 수 있습니다 . 그리고 처음으로 독서를하는 사람은 그들을 찾아야합니다. – Ryan

+0

@KlausD. 예, 이름 충돌을 피하는 일반적인 사용 사례입니다. 그러나, 나는 그것을 주관적인의 가독성을 위해 사용하는 것에 흥미가있다. – utengr

답변

1

일반적으로 가능한 한 피해야합니다. 가져 오기 이름은 예를 들어 NumPy와를 들어, 유비쿼터스 때 그것이 큰 효과를 사용하지만

항상np이 팬더는 항상 pd입니다 이다. 이름을 올려다 보지 않아도됩니다. 보이지 않는 코드베이스 앞에 앉아 있습니다. np.array을 보면 알 수 있습니다. 약간 더 짧지 만 훨씬 쉽게 건너 뛸 수 있습니다.

유용 할 수있는 또 다른 시간은 어디에서나 다른 모듈을 사용하는 단일 모듈입니다. 몇 줄 또는 10 줄마다이 모듈에 대한 호출입니다. 그렇다면 파일의 크기를 줄이기 위해 가져 오기를 사용하는 것이 좋습니다.
필자는 (테스트 가능한) 모듈 주위에 매우 얇은 래퍼 인 플라스크 앱으로이 작업을 수행했습니다.

내부 API 인 경우 (의미가 문맥에서 완전히 명확한 경우) process_words.py이 아닌 pw.py 일 수도 있습니다. IMO 조금 짧지 만 words.py이 잘 작동 할 수도 있습니다 (그러나 "프로세스"는 일반적인 단어이기 때문에 좀 더 구체적인 동사를 보일 수도 있습니다 ...).
words의 하위 모듈로 컨텍스트가 중요하므로 예를 들어 funcs이라고 부르는 것이 좋습니다.

3

실용적인 문제 중 하나는 사용 된 라이브러리 또는 모듈을 변경하고 코드를 변경하지 않고 실제 가져 오기를 전환 할 수있는 곳입니다. import somemoduleimport newmodule as somemodule이됩니다.

파이썬 2/3 호환성 코드를 가지고있을 때 try-except 블록 내에서 뭔가하는 것입니다 (six과 같은 패키지가 꽤 있습니다). 예 :

try: 
    # Are we using Python 2? 
    import StringIO as io 
except ImportError: 
    # No, we're using Python 3 instead 
    import io 
+0

당신은 수입을 위해 유스 케이스를 언급하고 있습니까? 이 가져 오기를이 특정 상황에서 실제 가져 오기로 전환 할 수 있다고 말하고 싶다고 가정하고 유사하게 사용 사례의 별칭에도 사용할 수 있습니다. 그렇다면 대답으로 받아 들일 수 있도록 내 질문과의 관계가 약간 분명해지면 좋을 것입니다. – utengr

+0

python 2/3의 또 다른 기능은 urllib.parse 등의 기능입니다 (위치는 동일하지만 위치가 다릅니다). 예를 들어 선택적 종속성으로도 이것을 보았습니다. except 블록에서는'io = None'을 ... 어떻게 생각하는지 모르겠습니다. –