はPythonのdocstringとコメントにメモリーモジュールがロード?
-
22-09-2019 - |
質問
はPythonのdocstringとコメントにメモリーモジュールがロード?
私はどうなっているのだろうこれは、通常の文書は私のコードも場合、このメモリ使用量?
通常は毎Pythonオブジェクトは、 __doc__
方法。はdocstringから読み込むファイル加工その他?
もちろん、検索はこちらのフォーラム、Googleのメーリングリストがまだ見つかり-関連する情報です。
んですか?
解決
は、ドキュメンテーション文字列が.pyc
バイトコードファイル内に存在し、そこからロードされます(コメントはありません)。あなたがpython -OO
を使用する場合は、あなたが取得し、代わりに-OO
ファイルの使用-O
ファイル(.pyo
フラグは、穏やかな最適化「の略で.pyc
とは反対に、「強烈に最適化」の略)、およびそれらを他に(ドキュメンテーション文字列を省略することによって最適化されていますます。
-O
によって行わ最適化、削除assert
文)例えば、あるファイルのfoo.py
を考えます
"""This is the documentation for my module foo."""
def bar(x):
"""This is the documentation for my function foo.bar."""
return x + 1
あなたは...以下のシェルのセッションを持つことができます:
$ python -c'import foo; print foo.bar(22); print foo.__doc__'
23
This is the documentation for my module foo.
$ ls -l foo.pyc
-rw-r--r-- 1 aleax eng 327 Dec 30 16:17 foo.pyc
$ python -O -c'import foo; print foo.bar(22); print foo.__doc__'
23
This is the documentation for my module foo.
$ ls -l foo.pyo
-rw-r--r-- 1 aleax eng 327 Dec 30 16:17 foo.pyo
$ python -OO -c'import foo; print foo.bar(22); print foo.__doc__'
23
This is the documentation for my module foo.
$ ls -l foo.pyo
-rw-r--r-- 1 aleax eng 327 Dec 30 16:17 foo.pyo
$ rm foo.pyo
$ python -OO -c'import foo; print foo.bar(22); print foo.__doc__'
23
None
$ ls -l foo.pyo
-rw-r--r-- 1 aleax eng 204 Dec 30 16:17 foo.pyo
我々は最初の-O
を使用するので、.pyo
ファイルは327のバイトだった、ということ注 - -OO
ファイルが周りやPythonまだあったので、でも.pyo
を使用した後は、それだけで、既存のものを使用し、それを上書き/再構築しませんでした。 (Pythonは.pyo
は、「日付のうち」であることを知っているように、または、同等に、touch foo.py
)モジュールのインポート時にPythonはそれを再構築(そして、この場合には、ディスク上の123のバイトを保存し、もう少しという意味では、既存の.pyo
を削除します - しかし、すべての.__doc__
エントリ)が消え、None
に置き換えられます。
他のヒント
はいドキュメンテーション文字列はファイルから読み込まれ、それはあなたがそれらを書いて停止しないでください。決しての今までにのパフォーマンスを得るためのコードの妥協の可読性パフォーマンステストを行って、あなたが心配している事が問題を引き起こしているプログラムのボトルネックが実際にあることを発見したまで。私はドキュメンテーション文字列は、任意の実世界の状況で任意の測定可能なパフォーマンスへの影響を引き起こすことは極めてまれであると思うだろう。
これらの(ファイルがPYCにコンパイルされたとき、またはPYCがロードされたとき - 彼らはobject.__doc__
の下で利用可能である必要があります)のファイルからの読み込みを取得しているが、 にありません - - >これはかなり合理的な状況下でのパフォーマンスには影響しません、またはあなたが本当に多メガバイトDOC-文字列
ドゥPythonのドキュメンテーション文字列とコメントがあります モジュールがある場合に、メモリに格納されています ロード?
ドキュメンテーション文字列がする.pycファイルにコンパイルされ、メモリにロードされています。コメントは、それがあるたびに、コンパイル時に破棄され、唯一の.pyファイルに変更した後に一度起こるコンパイル時にそれらを無視するのに要する軽微余分な時間(以外のものに影響を与えない、再コンパイルされているメインスクリプトを除いています実行)。
彼らはモジュール、クラス定義、または関数定義での最初ののものである場合にのみ、これらの文字列が保存されていることにも注意してください。あなたがほとんどどこでも、追加の文字列を含めることができますが、彼らは、コメントがあると同じようにコンパイル時に破棄されます。