[TIL. 27] Python - Modules


Modules


モジュールは、変数または関数クラスが集合したファイルです.
  • は、
  • を他のファイルで繰り返し使用することができる.
  • 完全なコードは、1つのファイルの中で大きすぎると、
  • を整理するために複数のファイルに分割される.

    モジュールの作成


    ファイルを作成し、再利用したい関数、クラス、変数を実装するだけです.
    ## my_module.py(파일명)      
    
    my_module_var = 7
    
    def my_module_func():
        return "Hello!"
    
    class MyModuleClass:
        pass

    モジュールの読み込み


    使用輸入

    # import<모듈 이름>
    
    import my_module
    importの場合、ファイル拡張子のほかに、ファイル名を使用してインポートする必要があります.
    # <모듈 이름>.<모듈에서 사용하길 원하는 변수/함수/클래스 이름>
    
    my_module.my_module_func()
    importロードモジュールを使用する場合は、モジュールの名前を付けることでモジュールを使用できます.
  • namespace
    moduleを使用するときにモジュールに名前を付ける必要があるのは、どのファイルで関数を見つけることができるかということです.名前を付けない場合は、モジュール内のファイルを表示したくない場合があります.このファイルで関数を検索したいだけです.名前空間や領域をこのように教えるのでnamespaceと呼ばれます.
  • ## main.py
    import my_module
    
    print(my_module.my_module_var)			# 변수 사용을 위해 모듈 이름을 붙여줌
    my_module.my_module_func()				# 함수 사용을 위해 모듈 이름을 붙여줌
    my_module_class = my_module.MyModuleClass()
  • キーワードを使用して、目的のモジュールを読み込みます.これにより、モジュールが対応するファイルに関連付けられます.
  • は、対応するモジュール名との接続呼び出しによって、接続されたモジュールに必要な変数、関数、クラスを使用する.
  • from ... import ... 利用する

    importキーワードを使用してモジュールをロードできます.
    <モジュール名>import<関数/変数/クラス1>、<関数/変数/クラス2>、...、<関数/変数/クラスN>
    from my_module import my_module_func, my_module_var
    
    print(my_module_var)		# 바로 변수 선언해서 사용
    my_module_func()			# 함수 바로 사용
    これで...import...使用する場合は、モジュールの名前を付けずにモジュールを使用できます.(上はimportでロードされているので、モジュールの名前を付ける必要はありません.

    import as


    1)複数のモジュールをインポートすると、名前の競合によりエラーが発生する可能性があります.
    2)異なるモジュールに同じ名前の関数、変数を持つことができる.
    3)必要なモジュールの要素名が長すぎる場合
    これらの場合、asによって新しい名前を付けることができます.
    from my_module  import my_func as f1
    from my_module2 import my_func as f2
    from my_module3 import function_with_name_too_long as f3
    
    f1()
    f2()
    f3()
    my funcをf 1と名前を変更します.
    また、モジュール名は、下図に示すようにasを使用して新しい名前を付けることもできます.
    import my_module as m1
    
    m1.my_module_func()

    Package


    💡 パッケージとは?
  • モジュールと同様に異なるファイルからロードして使用されますが、モジュールよりも大きく複雑なコードです.
  • モジュールのコード量が大きすぎるため、1つのファイルに入れる効率が悪いと判断した場合、複数のモジュールを選択できます.コードをpyファイルに分割して管理するのは有効です.これにより、複数のファイルのコードを1つのモジュールにロードして使用できます.これがpackageです.
  • 小包です.pyファイルからなるディレクトリがパッケージになります.
  • importの使用(packageから)


    通常のモジュールのようにインポートして使用できます.
    import pkg.mod1
    from pkg.mod2 import func2
    
    pkg.mod1.func2()
    func2()
    pkg.mod1.func 2()のようです.パッケージのインポートに必要なモジュールを使用します.

    package initalization


    場合によってはpackageをインポートする際に初期設定を行う必要があります.init.パッケージの初期設定はpyファイルで実現します.

    (パッケージディレクトリのファイル)
    1.インポート時のパスの全長を減らす
    import pkg.mod1
    
    pkg.mod1.func2()
    現在,pkgではmod 1,func 2をimport関数の基本手法として用いており,func 2関数を呼び出すたびにすべてのパスを入力する必要があるため,面倒である.しかし、関数名を直接呼び出すことができれば便利です.このときinit.pyで関数のパスを減らすことができます.
    # __init__.py
    from .mod1 import func2
    1) init.まずpyファイルにインポートする関数または変数を書きます.
    # main.py
    from pkg import func2
    
    func2()
    2)必要なファイルから...import ... 形式で使用できます.
    2.変数、関数、クラスの制限
    モジュール内のすべての関数が外部に露出することを防止し、内部でのみ使用できます.
    all変数で定義します.
    all変数のdefault値はすべての関数、変数、クラスであるため、all変数を個別に定義してインポート可能な要素を制限できます.
    # __init__.py
    from .mod1 import func2
    from .mod2 import func3
    
    __all__ = ['func2', 'func3']
    
    initファイルに露出したくない関数を定義する
    # main.py
    from pkg import *
    
    func2()
    func3()
    func4() ## <== Error. func4 함수는 __all__ 에 정의되지 않았으므로 import 될 수 없음.
    all変数はstring値を持つlistであるため、stringを使用してインポートする要素をlistに宣言できます.