2017-11-24 21 views
2

거기에 와일드 카드와 와일드 카드가 아닌 방식처럼 모두 다음 똑같은 파일프로그램에서 두 가지 다른 방법으로 동일한 모듈을 가져 오기위한 포인트가 있습니까? 로 가져올 수있는 포인트가

import spam as sp 
from spam import * 

? 당신이 SP로 스팸 메일을 가져올 때

+2

사용할 경우 그것은 당신이 무엇을 원하는 따라 달라집니다. 두 번째 임포트에서는 이것을'sp. '로 사용할 수 없습니다.'import *'가 때때로 불쾌하지 않습니다. 이 [답변] (https://stackoverflow.com/questions/2360724/what-exactly-does-import-import)을 참조하십시오. – scharette

+2

이것은 프로그램을 읽는 숙련 된 코더들이 저자가 임의의 장소에서 물건을 붙여 넣어 스크립트를 작성했으며 자신이하는 일을 실제로 알지 못한다는 것을 알 수 있습니다. :) –

+1

https://stackoverflow.com/questions/2386714/why-is-import-bad를 참조하십시오. –

답변

4

, 당신은 다른 가져 오기 명령을 사용하여 충돌이 없는지 확인하십시오

import spam as sp 
import myfunctions as my 

sp.foo() 
my.foo() 

이 예상대로 작동은하지만이되지 않습니다 :

from spam import * 
from myfunctions import * 


foo() 
foo() #Which foo() is meant? UNCLEAR!!! 

import spam as sp을 사용하여이 문제를 피할 때 어쨌든 from spam import *을 사용 하시겠습니까? 나는 이것에 어떤 점도 있다고 생각하지 않는다.

2

아니요 sp이라는 이름으로 spam을 가져온 다음 from spam import *sp을 사용하여 가져온 모든 항목은 절대로 사용하지 않으므로 불필요합니다.

예를 들어 somefunction()이라는 기능이있는 경우 import spam as sp 우리가 sp.somefunction()from spam import * 때문에이 직접 somefunction() 왜 대신 sp.somefunction()을 사용하여 호출 할 수 있습니다

somefunction() 부를 수있는 것을 의미한다.

from spam import *으로 간주됩니다. 각 기능을 개별적으로 가져 오기보다는 개별적으로 가져와야합니다. (from spam import somefunction, from spam import someotherfunction 등). 또는 sp.somefunction(), sp.someotherfunction()을 사용해도됩니다. 내가 생각할 수있는

3

유일한 이유는 당신이 from spam import *import spam as sp-변화하려는 것입니다. 이 줄을 바꾸면 즉시 코드가 깨져서 모든 줄 앞에 sp.이라는 접두사를 붙여야합니다. 이 변경을 더 느린 속도로 수행하려면이 작업을 수행 할 수 있습니다. 그런 다음 필요에 따라 sp.을 천천히 추가하고 결국 from spam import *을 제거 할 수 있습니다.

2

import spam as sp은 모듈을로드하고 변수 sp에 넣습니다. from spam import *은 모듈과 모든 속성 (클래스, 함수 등)을로드하고 와일드 카드로 가져온 코드를 spam에로드 할 수 있습니다.

import *은 많은 클래스가 있어야 액세스 할 수있는 기능입니다. 그러나 가져온 속성을 네임 스페이스에 캡슐화하지 않고 (import spam as sp을 사용하여 수행 한 작업) 원치 않는 동작으로 이어질 수 있으므로 (PEP는 2 가지 기능이 주 프로그램에서 동일한 이름을 갖고 스팸으로 처리 될 수 있기 때문에))

가장 좋은 방법, 그리고 당신이 사용하는 것입니다 무엇을 명확하게 진술하는 것은 from spam import func1, func2 또는 당신이 그것을 많이 import spam as sp을 사용하고 sp.func1()