Вопрос

Я понимаю, что в Python строка - это просто выражение, а строка сама по себе будет мусором сразу после возврата контроля к абонеру кода, но ...

  1. Большой класс / метод Строки дока в вашем коде: они пустые память, создавая строковые объекты вверх?
  2. Уровень модуля Уровень доки Строки: хранятся ли они бесконечно у переводчика?

Это даже имеет значение? Моя единственная забота пришла от идеи, что если я использую большие рамки, такие как 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 Файл, сгенерированный без аргументов командной строки. Может кто-нибудь объяснить это поведение?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top