Pythonプロジェクトの__pycache__ファイルは何をしますか?

今日、私は自分で書いたis_python.pyとrgb2gray.pyという2つの関数を含むPythonコードを作成しました。メイン関数がそれらを呼び出して実行した後、フォルダーのメインディレクトリに_という名前のファイルがあることがわかりました。 _pycache__ファイルには、次の名前の2つのファイルが含まれています

is_rgb.cpython-36.pyc
rgb2gray.cpython-36.pyc

これら2つのファイルの末尾は.cpython-36.pycであることがわかります。ここで、cpythonはC言語で実装されたPythonインタープリターを表し、-36は使用されるPythonバージョンが3.6であることを表します。

このpycについて話しましょう。pycは、pyファイルをコンパイルすることによって取得されるバイナリファイルです。pyファイルがpycファイルになると、読み込み速度が向上します。pycはクロスプラットフォームのバイトコードであり、JAVA仮想マシンの概念と同様にPython仮想マシンによって実行されます。また、Pythonを使用して商用ソフトウェアを開発する場合は、ソースコードの漏洩を防ぐために、Pythonをpycにコンパイルしてからリリースする必要があります。ははは、少し遠すぎるようです、もう一度話しましょう

Pythonがモジュールを呼び出すと何が起こるかを理解するために、最初に例を見てみましょう

呼び出されたモジュールの名前はfunction.pyです。

"""
    文件名:function.py
"""


def function():
    print("被调用函数输出")


function()

メインプログラムファイルの名前はmain.pyです。

"""
    文件名:main.py
"""

import function

print("主函数输出")

メインプログラムの実行結果:

被调用函数输出
主函数输出

呼び出されたモジュールの実行結果:

被调用函数输出

メインプログラムが呼び出されたモジュールを最初から最後まで実行しているのは驚くべきことです。

では、Pythonメインプログラムがモジュールを呼び出すにはどうすればよいのでしょうか。モジュールを呼び出すだけで、最初に実行するのではありません。-するために理解して何__name__プロパティを!

 Pythonでは、モジュールはオブジェクトであり、各モジュールには組み込みの属性__name__があり、__ name__の値は、モジュールの適用方法によって異なります。

①モジュールをインポートする場合、モジュール__name__の値は通常、パスやファイル拡張子を除いたモジュールファイル名です。

②標準プログラムのように直接モジュールを実行する場合、__ name__の値は特別なデフォルト「__main__」になります。

上記の知識があれば、モジュールの呼び出し中にモジュールを最初から最後まで実行することを回避できます。具体的なコードは次のとおりです。

呼び出されたモジュールの名前はfunction.pyです。

"""
    文件名:function.py
"""


def function():
    print("被调用函数输出")


if __name__ == '__main__':
    function()

メインプログラムファイルの名前はmain.pyです。

"""
    文件名:main.py
"""
import function

print("主函数输出")

main関数の実行結果:

主函数输出

呼び出されたモジュールの実行結果:

被调用函数输出

そうは言っても、コンピュータ言語について少し話しましょう

①コンパイル言語:コンパイルとは、アプリケーションのソースプログラムを実行する前に、プログラムのソースコードをターゲットコード(機械語)に「変換」することです。これにより、ターゲットプログラムを言語環境から独立して実行できるため、より便利で効率的に使用できます。 。ただし、アプリケーションプログラムを変更する必要がある場合は、最初にソースコードを変更してから、再コンパイルして新しいオブジェクトファイル(* .OBJ)を生成してから実行する必要があります。オブジェクトファイルのみがあり、ソースコードはありません。変更するのは非常に不便です。最近のほとんどのプログラミング言語はコンパイルされています。コンパイラは、ソースプログラムをターゲットプログラムに変換し、別のファイルに保存します。ターゲットプログラムは、コンパイラがなくてもコンピュータ上で直接実行できます。ほとんどのソフトウェア製品は、ターゲットプログラムの形式でユーザーに発行されるため、直接操作が容易になるだけでなく、他のユーザーがテクノロジを横領することも困難になります。C、C ++、Fortran、およびPascalはすべてコンパイルによって実装されます。

②通訳言語:通訳言語の実装では、トランスレータは対象の機械語を生成せず、実行しやすい中間コードを生成します。この中間コードは機械語とは異なり、ソフトウェアでサポートされています。ハードウェアを直接使用することはできず、ソフトウェアインタープリターは通常、実行効率の低下につながります。インタプリタ言語で書かれたプログラムは、中間コードを理解できる別のインタプリタによって実行されます。コンパイラとは異なり、インタプリタのタスクは、ソースプログラムをオブジェクトコードに変換して実行する必要なしに、ソースプログラムのステートメントを実行可能なマシン命令に1つずつ解釈することです。解釈プログラムの利点は、ステートメントで構文エラーが発生した場合、すぐにプログラマーの注意を引くことができ、プログラマーはプログラム開発中にそれを修正できることです。解釈されるBasic言語については、Basicプログラムを解釈して実行するために特別なインタプリタが必要であり、各言語は実行時にのみ翻訳されます。このインタプリタ言語は実行されるたびに翻訳されるため、非効率的です。一般に、Tcl、Perl、Ruby、VBScript、JavaScriptなどの動的言語が解釈されます。

③混合言語(最初にコンパイルしてから解釈する):Javaは非常に特殊で、Javaプログラムもコンパイルする必要がありますが、直接コンパイルして機械語と呼ぶのではなく、バイトコードにコンパイルしてから、解釈したバイトを実行します。 Java仮想マシンコードでのマナー。PythonもJavaと同様のコンパイルモードを採用しています。Pythonプログラムは最初にPythonバイトコードにコンパイルされ、次に特別なPythonバイトコードインタープリターがバイトコードの解釈と実行を担当します。

したがって、Pythonプログラムは、実行時にバイナリコードにコンパイルする必要はありませんが、プログラムはソースコードから直接実行されます。

簡単に言えば、Pythonインタープリターはソースコードをバイトコードに変換し、次にインタープリターはバイトコードを実行します

通訳の特定の仕事:

1.モジュールのロードとリンクを完了します

2.ソースコードをPyCodeObjectオブジェクト(つまりバイトコード)にコンパイルし、CPUが読み取るためにメモリに書き込みます

3. CPUは実行中のバイトコードをメモリから読み取り、終了後にバイトコードをハードディスクに書き戻します。つまり、バイトコードを.pycまたは.pyoファイルにコピーして、すべてのスクリプトのバイトコードファイルを現在のディレクトリに保存します。

その後、スクリプトを再度実行すると、まず[上記のバイトコードファイルがローカルにあるかどうか]と[バイトコードファイルの変更時刻がソースファイルの後であるかどうか]を確認してから直接実行します。それ以外の場合は、上記の12を繰り返します。 3つのステップ。

それから何人かの友人が質問をします、__ pycache__フォルダーの意味は何ですか?

コードが初めて実行されるとき、Pythonインタープリターはコンパイル済みのバイトコードを__pycache__フォルダーに既に配置しているため、後で再度実行する場合、呼び出されたモジュールが変更されていない場合は、コンパイル手順をスキップします。 __pycache__フォルダーに直接移動して、関連する* .pycファイルを実行します。これにより、プロジェクトを実行する前の準備時間が大幅に短縮されます。

おすすめ

転載: blog.csdn.net/weixin_43450646/article/details/107190092