変数名との導入に対応するモジュール:. -Import、実行ファイルを導入
保守可能なコードを書くために、私たちは別のファイルに配置されている機能グループの多くを置くので、各ファイルは、コードが比較的小さい含まれ、多くのプログラミング言語は、コードを整理するこの方法を採用しています。Pythonでは、ファイルはの.pyモジュール(モジュール)と呼ばれています。
モジュールを使用することの最大の利点は、コードの保守性を改善することである。第二に、コード開発の効率を向上させるために、モジュールが符号化されたときに、最初からコードを記述しなくても、それは他の場所で参照することができ、私たちはプログラムの作成に時間は、また、第三者からビルトインPythonモジュールとモジュールを含む他のモジュールを参照することができます。
したがって、三つのモジュールの合計:
- Pythonの標準ライブラリ
- サードパーティ製のモジュール
- カスタム・アプリケーション・モジュール
また、モジュールはまた、関数名や変数名の競合を避けます。同じ名前の関数と変数は関係なく、重複の他のモジュールとするかどうかの命名関数や変数名の、私たち自身のモジュールの製造で、そのため、それぞれ異なるモジュールに存在する、とすることができます。しかし、また、関数や変数名の定義以来、組み込み関数名と競合しないように、注意してください。
1.インポートファイル、ファイルパスと実行ファイルは、モジュールを次のように同じ層を実行
1つの #ファイルのcal.pyコンテンツ 2 。3 DEF 追加(X、Y): 4 リターン X + Y
- 導入方法1:
1つの #文書を導入するbin.py方法。1 2 。3 インポートCAL 。4 プリント(cal.add(2,9))
- 方法2の紹介:
。1つの #bin.pyインポートファイル方法2 2 。3 から CAL のインポートを追加 。4 印刷(追加(2,9))
- 導入方法3:
1つの #ファイルを導入するbin.py方法。3 2 。3 から CAL インポート * 4 プリント(ADD(2,9))
注:ステートメントをインポートすると、ファイルが検索対象ファイルの先頭で行われているディレクトリからファイルをインポートします
2.クロスレイヤ実行ファイルのインポートとファイルモジュールは、次のファイルのパスを実行します
1つの #ファイルのcals.test.pyコンテンツ 2 。3 DEF 追加(X、Y): 4 リターン X + Y
1つの #のファイルのcals.main.py内容 2 3。 から CALS インポート試験 #モジュールが参照ファイルパスを実行するために、最上層路に導入される 4。 DEF RUN(X、Y): 5 プリント(test.add(X、Y))
1つの #bin.pyインポートファイル方法 2 。3 から CALS インポートメイン 。4 main.run(2,9)
3 。動的モジュールを導入する方法は、モジュールはファイルパス、ファイルを実行します
1つの #ファイルのcals.test.pyコンテンツ 2 。3 DEF 追加(X、Y): 4 リターン X + Y 5。 DEF 乗算(X、Y): 6 戻り X * Y
- 動的な導入方法1:
1 #bin.py文件中动态导入方法1 2 3 module_t=__import__('cals.test') 4 print(module_t.test.add(2,9)) #通过导入方法1,可以获取得到顶层模块的内存地址 5 print(module_t.test.multiply(2,11))
- 动态导入方法2:
1 #bin.py文件中动态导入方法2 2 3 import importlib 4 module_t=importlib.import_module('cals.test') 5 print(module_t.add(2,9)) #通过导入方法2,可以直接获取得到底层模块的内存地址 6 print(module_t.multiply(2,11))
二. 包
为了避免模块名冲突,Python又引入了按目录组织模块的方法,称为包(package)。比如,一个abc.py的文件就是一个名字叫abc的模块,一个xyz.py的文件就是一个名字叫xyz的模块,在当abc模块与xyz模块与系统已有的其他模块命名冲突时,我们就可以通过包来组织模块。
引入了包以后,只要顶层的包名不产生冲突,那么位于不同包文件内部的模块之间就不会有命名冲突。
请注意,每个包文件中都包含一个__init__.py文件,这个文件是要求必须存在的,否则,Python就会把这个文件当成普通文件(文件夹)来处理,会丢失包的所有属性。__init__.py可以是空文件,也可以有Python代码,因为__init__.py本身就是一个模块,而它的模块名就是对应的包的名字。
包的导入同模块的导入方法相同,执行文件与待导入包的文件路径如下。
1 #web1.web2.web3.cal.py中文件内容 2 3 def add(x,y): 4 return x+y
- 导入方法1:
1 #bin.py文件中导入方法 2 3 from web1.web2.web3 import cal 4 print(cal.add(2,9))
- 导入方法2:
1 #bin.py文件中导入方法 2 3 from web1.web2.web3.cal import add 4 print(add(2,9))
三. 模块的__name__属性
在执行文件中,__name__='__main__';
在被导入文件中,__name__='所在文件路径'。
- 通常在模块中使用if __name__=='__main__':语句,来检测模块中功能函数的正确性;
- 在执行文件中也可以使用if __name__=='__main__':语句,以防止执行文件被调用。
四. 查看当前文件路径的方法
- 查看包含当前文件的文件路径:
1 #查看包含bin.py文件的文件路径 2 3 import os 4 print(os.path.abspath(__file__)) 5 6 """ 7 运行结果: 8 H:\MyPython\my_module\bin.py 9 """
- 查看包含当前文件的上层目录:
1 #查看包含bin.py文件的上层目录 2 3 import os 4 print(os.path.dirname(__file__)) 5 6 """ 7 运行结果: 8 H:/MyPython/my_module 9 """