デフォルトでは、docstring は.pyc
バイトコード ファイルに存在し、そこから読み込まれます (コメントは含まれません)。使用する場合python -OO
(-OO
フラグは「最適化を強く」-O
を表し、これは「穏やかに最適化する」を表すのとは対照的に)、.pyo
ファイルの代わりに.pyc
ファイルを取得して使用し、それらは docstring を省略することによって最適化されます (によって行われる最適化に加えて-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
でも、.pyo
ファイルがまだ残っていて、Python が再構築/上書きしなかったため、既存のものを使用しただけです。既存のものを削除する.pyo
(または、touch foo.py
Python.pyo
が「時代遅れ」であることを認識できるようにする) ことは、Python がそれを再構築することを意味します (そして、この場合、ディスク上で 123 バイトを節約し、モジュールがインポートされたときにもう少し節約します -- しかし、すべての.__doc__
エントリが消え、 に置き換えられますNone
)。