2017-09-25 5 views
-1

정리를 위해 별도의 파일에 일련의 명령을 정의하고 싶습니다.임포트 전에 정의 된 파이썬 모듈 사용 함수

def cmd1(): 
    print("calling cmd1") 

import define_cmd2 

cmd2() 

그리고 define_cmd2.py :

cmd1() 

def cmd2(): 
    print("called cmd2") 

그것은 나를 cmd1()이 정의되지 않은 말한다. 가져 오기 호출 전에 정의 된 내용을 사용/편집/호출 할 수 있도록 가져 오기를 호출하려면 어떻게해야합니까?

+0

define_cmd2.cmd2

  • 반환을 만들 것입니다 당신은 여기 명명 규칙은 매우 똑똑하다 생각하지만, 실제로는 단지 독자를 혼란. 좋은 사실적인 이름과 적절한 형식으로 다시 작성하십시오. – AK47

  • +0

    두 파일에 대한 적절한 예를 들어주십시오. 나는 실제로 어떤 파일을 가져와야하는지 이해할 수 없다. – roganjosh

    +0

    이 더 낫다. – BaleineBleue

    답변

    0

    파이썬 파일 (예 : define_cmd2.py)은 자체 포함되어야합니다. 가장 기본적인 요구 사항은 cmd1이라는 함수를 사용하려면 define_cmd2.py 또는 함수를 호출하기 전에 가져온 일부 파일에 정의해야합니다.

    그러나 이것은 XY problem과 비슷합니다. 당신은 실제로 무엇을하려고합니까?

    +0

    내 코드 중간에'define_cmd2.py'를 실행하고 싶습니다. 나는'define_cmd2.py'에 많은 함수를 정의하고 있습니다. 단지 다른 파일에 모든 것을 갖고 싶습니다. – BaleineBleue

    +0

    왜 define_cmd2가 cmd1을 사용 했습니까? define_cmd1은 별도의 파일이어야하며, 두 번 가져올 수 있습니다 (한 번 '주'에서 한 번, define_cmd2에서 한 번 @MadPhysicist 대답이 적합 할 것 같습니다.) –

    0

    먼저 Python 가져 오기가 어떻게 작동하는지 이해해야합니다.

    첫 번째 모듈에서 import을 호출하면 실행됩니다. 모든 함수와 변수 정의가있는 결과 네임 스페이스는 sys.modules과 마찬가지로 네임 스페이스에서 참조되는 모듈 개체를 만드는 데 사용됩니다. 다음에 가져 오기를 가져 오면 가져 오기는 기존 모듈을 sys.modules에서 참조합니다.

    주기적 가져 오기로 인해 발생하는 오류를 방지하려면 코드 객체가 실제로 실행되기 전에 모듈 객체가 실제로 먼저 만들어 지므로 추가 가져 오기에서 이미 기존 모듈이 sys.modules으로 표시되고 동일한 코드를 다시 실행하지 않습니다. 위에.

    특정 경우에 define_cmd1의 내용을 사용하려면 define_cmd2define_cmd1에서 명시 적으로 가져와야합니다. 둘째, 당신은 제대로 가져온 이름을 참조해야합니다

    define_cmd1 :

     
    def cmd1(): 
        print("calling cmd1") 
    
    import define_cmd2 
    
    define_cmd2.cmd2() 
    

    define_cmd2

     
    import define_cmd1 
    
    import define_cmd1.cmd1() 
    
    def cmd2(): 
        print("called cmd2") 
    

    굵게 표시된 항목을 추가해야하는 코드의 비트입니다.

    1. def 문은 함수 define_cmd1.cmd1을 생성합니다 : 명확히하기 위해

      , 여기 당신이 define_cmd을 실행할 때 무슨 일이 일어날 것입니다.

    2. import
    3. 로드하려고 시도합니다 define_cmd2
    4. importsys.modules['define_cmd1']이 이미 존재하기 때문에이로드 또는로드되는 것을 의미 아무것도하지 않는 것 define_cmd2인치
    5. define_cmd1.cmd1()이 실행됩니다.
    6. def 문은 함수를 로딩 define_cmd1
    7. 실행 define_cmd2.cmd2
    +0

    execfile이 내가 수행 한 작업에 적합합니까? 불안정하다고 들었습니다. 왜 그런가요? – BaleineBleue

    +1

    @ZachMozel 여기 아무도 당신이 무엇을하고 있는지 알지 못합니다. 당신이하고있는 일의 더 좋은 예를 생각해 내야합니다. –

    +0

    내가 제안한 것을 시도해 보았습니까? 실패 했습니까? –