Python - делают большие докуные струны.
-
02-10-2019 - |
Вопрос
Я понимаю, что в Python строка - это просто выражение, а строка сама по себе будет мусором сразу после возврата контроля к абонеру кода, но ...
- Большой класс / метод Строки дока в вашем коде: они пустые память, создавая строковые объекты вверх?
- Уровень модуля Уровень доки Строки: хранятся ли они бесконечно у переводчика?
Это даже имеет значение? Моя единственная забота пришла от идеи, что если я использую большие рамки, такие как Django, или несколько крупных библиотек открытых источников, они, как правило, очень хорошо документированы с потенциально несколькими мегабайтами текста. В этих случаях являются строки DOC, загруженные в память для кода, которые используются по пути, а затем хранить там, или он собирается сразу же, как обычные строки?
Решение
«Я понимаю, что в Python строка - это просто выражение, а строка сама по себе будет мусором сразу после возврата контроля к абонеру кода» указывает на недоразумение, я думаю. Docstring оценивается один раз (не на каждом вызове функций) и остается в живых, по крайней мере, пока функция делает.
"Это даже имеет значение?" Когда дело доходит до оптимизации, не отвечает, не думая об этом абстрактно, но путем измерения. «Несколько мегабайт» текста, вероятно, не очень много в приложении на память. Решение для сохранения памяти, вероятно, живет в другом месте, и вы можете определить, имеется ли это случай измерения.
Python's.
-OO
Коммутатор командной строки удаляет DocStrings.
Другие советы
Python Docstrings по умолчанию хранятся на неопределенный срок, поскольку они доступны через атрибут __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
Опция для переводчика, по-видимому, вызывает его удаление DocStrings из генерируемых .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
Файл, сгенерированный без аргументов командной строки. Может кто-нибудь объяснить это поведение?