Modules & Packages
Modules & Packages
Modules
モジュール
変数、関数、クラスを含むファイル
モジュールを作成する理由は次のとおりです.
Making Module
.py
ファイルを作成すると、再利用する変数、関数、またはクラスをファイルに実装できます.# my_module.py
my_module_var = 7
def my_module_func():
return "Hello!"
class MyModuleClass:
pass
Import Module
import module_name
import
キーワードとロードするモジュールのファイル名を入力します.(拡張子
.py
を省略)モジュールを組み込むと、
.
(点)でモジュールの任意の変数/関数/クラスを実現できます.<모듈 이름>.<모듈에서 사용하길 원하는 변수/함수/클래스 이름>
モジュールmy_module
の関数my_module_func
を呼び出すには、次の操作を行います.# example
my_module.my_module_func()
なぜ前にモジュール名を付けるのですか?
Pythonは、この関数を見つけるにはどのファイルが必要かを確認する必要があるからです.
モジュールに名前を付けなければ、Pythonはモジュールのファイルを見ず、そのファイルで関数を検索したいだけなので、モジュール名を前に付けなければなりません.
Import Module II
from <모듈 이름> import <함수/변수/클래스1>, <함수/변수/클래스2>, ..., <함수/변수/클래스N>
my_module
モジュールでmy_module_func
関数およびmy_module_var
変数を使用する場合は、次の操作を行います.from my_module import my_module_func, my_module_var
print(my_module_var)
my_module_func()
なぜimportを使うのですか?
必要な関数や変数、クラスを直接呼び出すことができるので、モジュールが使用する部分を明確にするときに使用します.
また、
アスタリスク
from.. import..
を使用すると、モジュール内のすべての要素が*
になります.なぜimportを推奨しないのですか?
localscopeを持つ他の変数/関数/クラスと名前の競合が発生する可能性があります.名前の競合が発生すると、わかりにくい可能性があります.
Import As
from module_name import variable/function/class_name as new_name
複数のモジュールをロードする必要があるが、2つのモジュールに*
という関数が存在する場合、競合が発生する可能性があります.このとき、
yo_maker()
キーワードを使用して新しい名前を付け、ファイルで使用することができます.# example
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()
では、モジュール名にも新しい名前を付けることができますか?
もちろん、
import as
名自体にも新しい名前を付けることができます.# example
import my_module as m1
m1.my_module_func()
Packages
ほうそう
複数のファイルのコードを1つのモジュールから別のモジュールにロードして使用します.
パッケージPythonファイルからなるディレクトリ(ディレクトリ)はパッケージ名となるパッケージとなる.
Import Package
dotシンボルを使用して、パッケージ内の所望のモジュール
module
を使用する.# example
import pkg.mod1
from pkg.mod2 import func2
pkg.mod1.func2()
func2()
Package Initialization
importファイル
Pythonは
__init__.py
ファイルでpackage初期設定を許可します.パッケージに
__init__.py
ファイルが含まれている場合、パッケージが__init__.py
の場合、import
ファイルのコードが自動的に実行されます.__init__.pyファイルの機能
__init__.pyでパスを減らすにはどうすればいいですか?
「
__init__.py
ファイルに一度インポートすることで、パスの長さを短縮できます.」「pkg」で「mod 1」の「func 2」関数を使用する場合は、次の操作を実行する必要があります.
import pkg.mod1
pkg.mod1.func2()
長いんじゃないですか.__init__.py
関数を使うたびにこのように書くのは面倒です.このとき、
func2
ファイルで関数のパスを減らすことができます.# __init__.py
from .mod1 import func2
# main.py
from pkg import func2
func2()
__init__.allファイルでpy変数を指定する
内部でしか使用できない関数がある場合は、packageの外部で
__init.py__
で使用されないようにimport
変数を指定できます.パッケージによって
__all__
になる要素は、import
変数によって定義されます.all変数の指定によるall要素の制限
import
変数のデフォルト値は、すべての関数/変数/クラスであるため、__all__
変数を個別に定義して、インポート可能な要素を制限できます.all変数のlist性質
__all__
変数は文字列値を持つ要素のlistであるため、stringを使用してインポートする要素をlistに宣言できます.# __init__.py
from .mod1 import func2
from .mod2 import func3
__all__ = ['func2', 'func3']
# main.py
from pkg import *
func2()
func3()
func4() ## <== Error. func4 함수는 __all__ 에 정의되지 않았으므로 import 될 수 없음.
Using other one's Package
__all__
Pythonのpackage managerツールpip install pkg_name
を使用すると、他の人のpackageをpip
に設定できます.たとえば、Djangoをインストールするには、端末に次のように入力します.
pip install Django
Take Away
難しい難しい難しい!
モジュールを理解するにはどうすればいいのでしょうか...コースに入ると、確かに難しくなってきました.
パッケージにもimport
ファイルと__init__.py
変数が記載されていますが、まだ実際に使用されていないので理解しにくいと思います.
Reference
この問題について(Modules & Packages), 我々は、より多くの情報をここで見つけました
https://velog.io/@jinatra/Modules-Packages
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について(Modules & Packages), 我々は、より多くの情報をここで見つけました https://velog.io/@jinatra/Modules-Packagesテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol