Python ビデオ チュートリアル 今日のコラムでは、Python モジュールのインポート メカニズムと大規模プロジェクトの仕様について学習する方法を紹介します。
日々のプロジェクトで Python を使用するプロセスでは、各モジュールのインポートの問題を解決する必要があり、リファレンスに遭遇することがよくあります。モジュールの相互インポートなどの問題があるため、Python のモジュールインポートの仕組みと、日常の大規模プロジェクトで従うべきモジュールインポートの仕様について説明するためにこの記事を書きました
日々のプログラミングでは、作成したコードロジックを再利用するためにモジュールにカプセル化し、必要に応じて直接インポートして再利用することで開発効率を向上させます。 モジュールは関数、クラス、変数を定義でき、実行可能コードを含めることもできます。モジュール ソースには次の 3 種類があります。 ①Python組み込みモジュール(標準ライブラリ) ②サードパーティ製モジュール。 ③ カスタム モジュール;
モジュールのインポートは、通常、ファイル ヘッダーの import キーワードを使用して行われます。モジュールのインポートは、モジュールを 1 回実行することと同等です。 module をインポートし、この名前空間にインポートされたモジュールの名前空間との接続を確立します。これは、この名前空間に新しい変数を作成するのと同じです。この変数の名前は、インポートされたモジュールの名前であり、インポートされたモジュールの名前空間。したがって、インポートされたモジュールは変数と同等です。 したがって、同じモジュールを複数回インポートしても、最初にインポートされたときにのみ実行されます。 (後続のインポートでは、モジュール変数がすでに存在していると判断され、実行されません)
インポートされたすべてのモジュールは、Python 組み込み辞書 sys.modules に格納されます。 Python が開始され、メモリにロードされ、新しいモジュールをインポートすると、sys.modules が自動的にモジュールを記録します。 Python のモジュール検索パス メカニズムは次のとおりです:
絶対パスインポート
すべてのモジュールのインポートは「ルートノード」から開始されます。ルート ノードの場所は sys.path のパスによって決まります。通常、プロジェクトのルート ディレクトリは自動的に sys.path にあります。プログラムをどこでも実行したい場合は、sys.pathimport sys,os BASE_DIR = os.path.dirname(os.path.abspath(__file__))#项目根目录所在的绝对路径sys.path.append(BASE_DIR)import A, B #导入A、B包复制代码
#from . import b2 #这种导入方式会报错,只有在包内部直接执行的时候才可以这样导入。import b2#正确b2.print_b2()复制代码
init.py ファイルは、パッケージを整理し、モジュール間の参照の管理を容易にし、パッケージのインポート動作を制御するために使用されます。 このファイルにはコンテンツを含めることはできません。つまり、空のファイルです (空の場合は、インポート [パッケージ] フォームを使用するだけでは何もできません)。存在する必要があるだけです。マークに相当します。
python3 では、パッケージの下に
init.py ファイルがない場合でも、インポート パッケージはエラーを報告しませんが、python2 では、ファイルは次の場所にある必要があります。パッケージ、そうでない場合はインポートします。パッケージはエラーを報告します。 #allVariable
リストにないモジュールは、他のプログラムから参照されません。 all は、 all= ['所属する現在のパッケージのモジュール 1 の名前', 'モジュール 1 の名前'] のように書き換えることができます。リスト内のモジュール名が使用されます。
在包内部直接运行时,包的name == 'main',但是在外部导入包是,可以通过
if __name__ == '__main__':复制代码
来避免实现包内部调试时的逻辑
当两个模块A和B之间相互import时,就会出现循环导入的问题,此时程序运行会报错:can not import name xxx,如:
# a.pyprint('from a.py')from b import x y = 'a'复制代码
# b.pyprint('from b.py')from a import y x = 'b'复制代码
我们来分析一下这种错误是怎么出现的:
因此在a.py中执行from b import x的顺序就是1->3,先引入b,b里面from a import y由相当于执行了a.py,顺序是1->2,因为此时b已经引入所以不会执行3,2中无法找到x对象,因为引入b时还没执行到x='b'这一步,所以报错了
分离模块,将同一类别的模块放在同一目录下,形成类别分明的目录架构,如:
更多相关免费学习推荐:python视频教程
以上がPython モジュールのインポート メカニズムと大規模プロジェクトの仕様を学びますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。