保守可能なコードを作成するために、多くの関数を異なるファイルにグループ化して、各ファイルに含まれるコードが比較的少なくなるようにします。多くのプログラミング言語では、この方法でコードを整理しています。 Pythonでは、.pyファイルはモジュール(Module)と呼ばれます。
**モジュールを使用する利点は何ですか? ****
モジュールを作成すると、他の場所で参照できます。プログラムを作成するときは、組み込みのPythonモジュールやサードパーティのモジュールなど、他のモジュールを参照することがよくあります。
モジュールは、関数名と変数名の間の競合を回避することもできます。同じ名前の関数と変数は、異なるモジュールに格納できます。ただし、組み込みの関数名と競合しないように注意してください。
異なる人が書いたモジュール名が同じ場合はどうなりますか?モジュール名の競合を回避するために、Pythonは、パッケージと呼ばれる、ディレクトリごとにモジュールを編成する方法を導入しました。
abcモジュールとxyzモジュールの名前が他のモジュールと競合していると仮定すると、競合を回避するためにパッケージを介してモジュールを編成できます。この方法は、mycompanyなどの最上位のパッケージ名を選択し、それを次のディレクトリに保存することです。
パッケージが導入された後、最上位のパッケージ名が他のモジュールと競合しない限り、すべてのモジュールが他のモジュールと競合することはありません。これで、abc.pyモジュールの名前はmycompany.abcになり、同様に、xyz.pyのモジュール名はmycompany.xyzになりました。
各パッケージディレクトリの下に__init__。pyファイルがあることに注意してください。このファイルが存在する必要があります。存在しない場合、Pythonはこのディレクトリをパッケージではなく通常のディレクトリとして扱います。 init。py自体がモジュールであり、そのモジュール名がmycompanyであるため、init.pyは空のファイルまたはPythonコードにすることができます。
! /usr/bin/env python3
# - *- coding: utf-8-*-' a test module '
__ author__ ='Michael Liao'import sys
def test():
args = sys.argv
iflen(args)==1:print('Hello, world!')
elif len(args)==2:print('Hello, %s!'% args[1])else:print('Too many arguments!')if __name__=='__main__':test()
1行目と2行目は標準のコメントです。1行目のコメントにより、このhello.pyファイルをUnix / Linux / Macで直接実行できます。2行目のコメントは、.pyファイル自体が標準のUTF-8エンコーディングを使用していることを示しています。
4行目は、モジュールのドキュメントコメントを表す文字列です。モジュールコードの最初の文字列は、モジュールのドキュメントコメントと見なされます。
6行目では、__ author__変数を使用して作成者を記述しているため、ソースコードを公開すると、他の人があなたの名前を見ることができます。
上記はPythonモジュールの標準ファイルテンプレートです
sysモジュールを使用する最初のステップは、モジュール import sys
をインポートすることです。sysモジュールをインポートした後、モジュールを指す変数sysがあります。sys変数を使用することにより、sysモジュールのすべての機能にアクセスできます。
sysモジュールにはargv変数があり、リストには、コマンドラインでモジュールを使用するときに入力されたすべてのパラメーターが格納されます。最初のパラメータは常に.pyファイルの名前であるため、argvには少なくとも1つの要素があります。次に例を示します。
python3helloを実行します.pyによって取得されたsys.argvは['hello.py'];
python3helloを実行します.pyMichaelによって取得されたsys.argvは['hello.py', 'Michael]。
ツールスクリプトは、sys.argvを介して使用パラメータを読み取ることです。
最後に、これらの2行のコードに注目してください
if __name__=='__main__':test()
コマンドラインでhelloモジュールファイルを実行すると、Pythonインタープリターは特別な変数__name__を__main__に設定し、helloモジュールが他の場所にインポートされた場合、__ name__は他の場所にあり、if判定は失敗します。 、この種のifテストでは、モジュールがコマンドラインを実行するときに追加のコードを実行できます。最も一般的なのは、テストを実行することです。
といった:
コマンドラインから直接 python3 hello.pyを使用する場合、__ name__
は __main __
であり、要件を満たしている場合は、test()を実行します。
test.pyからhello.pyモジュールをインポートして使用すると、 __name__
がテストされます。満たされない場合、test()は実行されません。
モジュールでは、多くの関数と変数を定義できますが、他の人が使用したい関数と変数、およびモジュール内でのみ使用したい関数と変数もあります。 Pythonでは、これは_プレフィックスを介して実現されます。
通常の関数名と変数名はpublic(public)であり、abc、x123、PIなどのように直接引用できます。
__xxx__のような変数は、直接引用できる特別な変数ですが、特別な用途があります。たとえば、上記の__author__と__name__は特別な変数です。helloモジュールで定義されたドキュメントのコメントには、特別な変数__doc__を使用してアクセスすることもできます。この変数名を独自の変数に使用しないでください。
xxxや__xxxなどの関数または変数は非公開(非公開)であり、abc、 abcなどのように直接引用しないでください。
プライベート関数と変数を直接参照するのではなく、直接参照する必要があると言う理由は、Pythonにはプライベート関数または変数へのアクセスを完全に制限する方法がないためです。ただし、これはプログラミング手法ではありません。プライベート関数または変数を参照する必要があります。
言い換えれば、それは単なる宣言であり、アクセスしたい場合は引き続きアクセスできます。プライベート関数または変数は他の人から参照されるべきではないので、それらはどのように使用されますか?
ef _private_1(name):return'Hello, %s'% name
def _private_2(name):return'Hi, %s'% name
def greeting(name):iflen(name)3:return_private_1(name)else:return_private_2(name)
モジュール内のgreeting()関数を公開し、private関数で内部ロジックを非表示にして、greeting()関数を呼び出すときに、内部private関数の詳細を気にする必要がないようにします。これは、コードのカプセル化と抽象化の非常に便利なメソッドでもあります。これは:
**外部から参照する必要のない関数はすべてプライベートとして定義され、外部から参照する必要のある関数のみがパブリックとして定義されます。 ****
上記はPythonのモジュールの詳細な内容です。pythonモジュールの詳細については、ZaLou.Cnの他の関連記事に注意してください。
Recommended Posts