Programming Language/Python

[Python] 17. 모듈(module)

lumana 2023. 11. 7. 01:56

모듈(module)


모듈이란?

  • 함수나 변수 또는 클래스를 모아 놓은 파일

  • 다른 파이썬 프로그램에서 불러와 사용할 수 있게 만든 파일이기도 하다.

  • 이미 만들어 놓은 모듈을 사용할 수도 있고, 직접 만들 수도 있다.

모듈 만들기


  • mod1.py에 덧셈, 뺄샘 함수를 만들었는데, 이 파일을 모듈이라 할 수 있다.

모듈 불러오기


  • import

    • 대화형 인터프리터 사용 시 디렉토리를 모듈 파일이 존재하는 곳으로 이동시켜야만 import 할 수 있음.

    • 환경변수나 sys.path모듈을 이용하여 모듈을 이동시키지 않고 import 할 수 있다.

    • 형식 : import 모듈이름 (.py 쓰면 안됨!!)

    import mod1
    print(mod1.add(3,4))
    res : 7
    
    print(mod1.sub(3,4))
    res : -1
    • 실수로 import mod1.py라고 하면 안된다.

    • 모듈에 있는 함수를 사용할 땐 (모듈이름).(함수이름) 를 사용하자

  • from (모듈) import (함수)

    • 모듈 이름 없이 함수 이름만 쓰고 싶은 경우 사용

      from mod1 import add
      print(add(3,4))
      res : 7
    • 2가지 이상 함수를 import 하고 싶을 때는?

      • 콤마로 구분하여 필요한 함수를 불러오기
      from mod1 import add, sub
      • *(애스터리스트)사용 --> mod1의 모든 함수 사용
      from mod1 import *

모듈을 만들 때 주의해야 할 점


  • 만약에 mod1.py에 add, sub 함수가 존재하고, print('mod1.py') 라는 코드가 있다고 해보자

    • 이 상황에서 import mod1을 하면 print('mod1.py')가 실행된다

      • python에서는 C와 달리 main 함수가 없어, 들여쓰기가 되지 않은 레벨의 코드를 먼저 실행시킨다.
  • .py파일을 import 했을 때 특정 코드만 import 되게 해보자

    # mod1.py
    
    def add(a, b):
        return a + b
    
    def sub(a, b):
        return a - b
    
    if __name__ == "__main__":
        print("mod1.py")

if __name__ == "__main__" 의 의미

  • 모듈로 불러서 사용할 때는 false가 됨

  • 파일을 직접 실행할 때는 true가 됨.

  • 어떤 ex.py를 import하면, false가 되고, ex.py를 직접 실행하면 true가 된다.

  • 모듈로 import 할 때 실행될 필요가 없는 부분을 if __name__ == "__main__"로 처리하면 된다.

__name__ 변수

  • ex.py라는 함수를 직접 실행하면 __name__변수에는 __main__ 이 저장된다.

  • 파이썬 셸이나 모듈에서 ex.py를 import하면 __name__변수에는 ex.py가 저장된다.

클래스나 변수 등을 포함한 모듈


# mod2.py
PI = 3.141592

class Math:
    def solv(self, r):
        return PI * (r ** 2)

def add(a, b):
    return a + b
  • 변수 접근

    • 모듈이름.변수이름
    import mod2
    print(mod2.PI)
    res : 3.141592
  • 모듈에 있는 클래스 생성

    • 모듈이름.클래스()
    import mod2
    a = mod2.Math()
  • 모듈에 있는 클래스의 메서드 접근

    • 객체이름.메서드이름(매개변수)

    • 모듈의 클래스에 대한 객체를 생성했으면, 모듈이름은 따로 표기하지 않는다.

    import mod2
    a = mod2.Math()
    a.solv(2)
  • 함수 호출

    • 모듈.함수이름(매개변수)
    import mod2
    mod2.add(mod2.PI, 4.4)

참조) Do it! 점프 투 파이썬 (박응용 지음)