Строки документации Python по умолчанию хранятся неопределенно долго, так как они доступны через атрибут __doc__ функции или модуля. Например, со следующим в test.py:
"""This is a test module."""
def f():
"""This is a test function."""
pass
Тогда:
$ python
Python 2.5.1 (r251:54863, Oct 30 2007, 13:54:11)
[GCC 4.1.2 20070925 (Red Hat 4.1.2-33)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import test
>>> test.__doc__
'This is a test module.'
>>> test.f.__doc__
'This is a test function.'
>>>
Опция -OO
для интерпретатора, очевидно, заставляет его удалять строки документации из сгенерированных .pyo
файлов, но это не дает ожидаемого эффекта:
$ python -OO
Python 2.5.1 (r251:54863, Oct 30 2007, 13:54:11)
[GCC 4.1.2 20070925 (Red Hat 4.1.2-33)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import test
>>> test.__file__
'/tmp/test.py'
>>>
$ grep "This is a test" /tmp/test.pyo
Binary file /tmp/test.pyo matches
$ python -OO
Python 2.5.1 (r251:54863, Oct 30 2007, 13:54:11)
[GCC 4.1.2 20070925 (Red Hat 4.1.2-33)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import test
>>> test.__file__
'/tmp/test.pyo'
>>> test.__doc__
'This is a test module.'
>>>
И действительно, файл test.pyo
, созданный с помощью -OO
, идентичен файлу test.pyc
, созданному без аргументов командной строки. Кто-нибудь может объяснить это поведение?