2017-12-27 20 views
0

패키지 내의 모든 모듈을 루트 수준의 기본 응용 프로그램에서 가져 와서 Python 3에서 즉시 사용할 수있는 모듈 내의 함수를 사용할 수 있습니까?패키지 모듈의 함수를 Python3의 루트 응용 프로그램에서 즉시 사용할 수있게하려면 어떻게합니까?

+app 
    |- __init__.py 
    |- main.py 
    |+ package 
    |- __init__.py 
    |- module.py #(contains function1, function2 and function 3) 

내가 main.py 내에서 다음 import 문 (은 복잡한 애플리케이션을위한 길고 실수 얻을 수 있습니다)을 피하기 위해 같은 것입니다 :

from package.module import function1, function2, function3 

이것은 좋은 여기 예제 파일 트리입니다 , 그 때 그것은를 main.py에서 호출하게한다. package.module에서 함수를 가져 오는 것만으로는 함수의 전체 디렉토리를 호출하여 스크립트 내에서 사용하거나 새로운 함수 내에서 별칭을 지정해야합니다. 예를 들어 :

from package import * #it is said this is bad form as well 

module.function(param) 
#I just want the function and don't want to call module also 

내 목표는 패키지와 모듈을 가져 오는 것입니다 다음 전체가 : 나는 의미 내 패키지의 __init__.py__all__ = ["module1", "module2"]를 포함하면 내가 가진

import package.module 

package.module.function(param)#not fun...too long! 

#or like this 
def newFunction(param): 
    '''why create a new function to handle an already existing one? 
     Bad form and non Pythonic''' 
    return package.module.function(param) 

이 (가) 다음을 수행합니다 함수를 사용하려고 할 때마다 패키지와 모듈을 명시 적으로 호출 할 필요없이 모듈 내의 모든 함수를 사용할 수 있습니다. 나는 documentation for Python 3 about modules and packages을 읽고

import package.module 

function1(x) 

:의 라인을 따라 뭔가를 생각. 생각/도움을 주시면 감사하겠습니다.

답변

1

가장 좋은 타협 수입에 이름을 보인다

import package.module as mod 

mod.function(param) 

입력하면 세 글자가 충분히 짧아야한다. 동시에 가져 오기는 정규화되고 전역 이름 공간을 오염시키지 않으므로 * 가져 오기를 수행합니다. mod의 이름은 자유롭게 사용할 수 있습니다. 한 글자의 이름조차도 작동 할 것입니다. 그러나 이름에 글자가 3 자 이상인 것이 좋습니다.

+0

이것은 실제로 Logic @ MikeMüller입니다. 그러나 모듈과 패키지에서 많은 함수를 가져 오는 경우 가져 오기 명령문이 기하 급수적으로 커질 수 있습니다. 필자는 한번도 시도한 적이 없지만 모든 함수 가져 오기를 처리하기 위해 가져 오기 스크립트를 작성한 다음 주 응용 프로그램에서 간단하게 호출 할 수 있다고 가정합니다. 50 개 이상의 가져 오기가있을 수있는 곳에서는 매우 큰 응용 프로그램을 어떻게 처리합니까? – Fergus

+0

필요한 것을 가져와야합니다. '*'나 my 메소드를 사용하든, 여전히 같은 양의 import 문이 필요합니다. –

+0

다시 한번 감사드립니다. @ MikeMüller. 어떻게하면 내 모든 가져 오기가 들어있는 파일을 만든 다음'__main __. py' 응용 프로그램에서 간단히 불러올 수 있습니까? 그것은 메인 애플 리케이션 내에서 가져 오기 프로세스를 청소 것 같아. – Fergus