ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 모듈과 패키지 만들기
    Python 2023. 10. 30. 16:27
    모듈 만들기
    # square2.py
    
    base = 2          # 변수
    
    def square(n):    # 함수
        return base ** n

     

    모듈 사용

    # main.py
    # import 모듈
    # 모듈.변수
    # 모듈.함수()
    
    import square2
    
    print(square2.base)         
    print(square2.square(10))   
    
    # 실행 결과
    2
    1024

     

    from import로 변수, 함수 가져오기

    # from 모듈 import 변수, 함수
    from square2 import base, square
    print(base)
    print(square(5))
    
    # 실행 결과
    2
    32

     

    모듈에 클래스 작성

    # person.py
    
    class Person:    # 클래스
        def __init__(self, name, age, addr):
            self.name = name
            self.age = age
            self.addr = addr
    
        def greeting(self):
            print('안녕하세요. 저는 {}입니다.'.format(self.name))
            
    # main.py
    
    import person
    
    maria = person.Person('마리아', 20, '수원')
    maria.greeting()
    
    # 실행 결과
    안녕하세요. 저는 마리아입니다.

     

    from import로 클래스 가져오기

    from person import Person
    james = Person('제임스', 20, '제주')
    james.greeting()
    
    # 실행 결과
    안녕하세요. 저는 제임스입니다.

     

    모듈과 시작점 알아보기
    if __name__ == '__main__':
        코드

    위 코드를 사용하는 이유?

    # __name__
    
    # hello.py
    
    print('hello 모듈 시작')
    print('hello.py __name__:', __name__)    # name 변수 출력
    print('hello 모듈 끝')
    
    # main.py
    
    import hello
    
    print('main.py __name__:', __name__)    # __name__ 변수 출력
    
    # 실행 결과
    hello 모듈 시작
    hello.py __name__: hello
    hello 모듈 끝
    main.py __name__: __main__

    실행해 보면 hello.py 파일과 main.py 파일의 __name__ 변숫값 출력

    파이썬에서 import로 모듈 가져오면 해당 스크립트 파일이 한 번 실행

     

    어떤 스크립트 파일이든 파이썬 인터프리터가 최초로 실행한 스크립트 파일의 __name__에는 '__main__'이 들어감

    > 프로그램의 시작점(entry point)

     

    파이썬은 최초로 시작하는 스크립트 파일과 모듈의 차이가 없음

    어떤 스크립트 파일이든 시작점이 될 수도 있고, 모듈도 될 수 있음

    > __name__ 변수를 통해 현재 스크립트 파일이 엔트리 포인트인지 모듈인지 판단

    if __name__ == '__main__':
        코드

    > 현재 스크립트 파일이 프로그램의 엔트리 포인트가 맞는지 판단하는 작업

    > 스

     

     

    스크립트 파일로 실행하거나 모듈로 사용하는 코드 만들기

    # clac.py
    def add(a, b):
        return a + b
    
    def mul(a, b):
        return a * b
    
    if __name__ == '__main__':
        print(add(10, 20))
        print(mul(10, 20))
    # 터미널 창 실행 결과
    PS C:project\basic> python clac.py
    30
    200
    
    PS C:project\basic> py
    >>> import clac
    >>> 
    >>> clac.add(50, 60)
    110
    >>> clac.mul(50, 60)
    3000
    >>>

    import clac에서 30, 200이 출력되지 않은 이유는 main이 아니기 때문

     

    패키지 만들기

    패키지 폴더 구성

    project

        > main.py

        > calcpkg

                > __init__.py

                > operation.py

                > geometry.py

    # __init__.py 파일은 내용을 비워 둘 수 있음

    파이썬 3.3 이상부터는 __init__.py 파일이 없어도 패키지로 인식되지만 하위 버전에도 호환되도록 작성 권장

     

    패키지에 모듈 만들기

    # operation.py
    
    def add(a, b):
        return a + b
    def mul(a, b):
        return a * b
       
       
    # geometry.py
    
    def triangle_area(base, height):
        return base * height / 2
    
    def rectangle_area(width, height):
        return width * height

     

    패키지 사용

    # import 패키지.모듈
    # 패키지.모듈.변수
    # 패키지.모듈.함수()
    # 패키지.모듈.클래스()
    
    import calcpkg.operation
    import calcpkg.geometry
    
    print(calcpkg.operation.add(10, 20))
    print(calcpkg.operation.mul(10, 20))
    
    print(calcpkg.geometry.triangle_area(30, 40))
    print(calcpkg.geometry.rectangle_area(30, 40))
    
    # 실행 결과
    30
    200
    600.0
    1200

     

    from import로 패키지의 모듈에서 변수, 함수, 클래스 가져오기

    from 패키지.모듈 import 변수

    from 패키지.모듈 import 함수

    from 패키지.모듈 import 클래스

    >>> from calcpkg.operation import add, mul
    >>> add(10, 20)
    30
    >>> mul(10, 20)
    200

     

    모듈과 패키지를 찾는 경로

    >>> import sys
    >>> sys.path
    ['',
    'C:\\Users\\user\\anaconda3\\python311.zip',
    'C:\\Users\\user\\anaconda3\\DLLs',
    'C:\\Users\\user\\anaconda3\\Lib',
    'C:\\Users\\user\\anaconda3',
    'C:\\Users\\user\\anaconda3\\Lib\\site-packages',
    'C:\\Users\\user\\anaconda3\\Lib\\site-packages\\win32']

     

    패키지에서 from import 응용

    from . import 모듈

    # __init__.py
    
    from . import operation    # 현재 패키지에서 모듈을 가져옴
    from . import geometry     # . < 현재 패키지라는 뜻

    . < 현재 폴더

    .. < 상위 폴더

    # main.py
    
    import calcpkg    # calcpkg 가져오기
    
    # import calcpkg.operation
    # import calcpkg.geometry
    
    print(calcpkg.operation.add(10, 20))
    print(calcpkg.operation.mul(10, 20))
    
    print(calcpkg.geometry.triangle_area(30, 40))
    print(calcpkg.geometry.rectangle_area(30, 40))
    
    # 실행 결과
    30
    200
    600.0
    1200

     

    'Python' 카테고리의 다른 글

    파이썬 기초와 Ipython, jupyter notebook  (0) 2023.10.31
    웹의 데이터로 그래프 그리기  (0) 2023.10.31
    모듈과 패키지 사용  (0) 2023.10.30
    정규표현식  (0) 2023.10.25
    데코레이터(장식자)  (0) 2023.10.25
Designed by Tistory.