docstrings Python и комментарии хранятся в памяти, когда модуль загружается?

docstrings Python и комментарии хранятся в памяти, когда модуль загружается?

Я задался вопросом, верно ли это, потому что я обычно документирую свой код хорошо; это может влиять на использование памяти?

Обычно каждый объект Python имеет a __doc__ метод. Те docstrings читаются из файла или обрабатываются иначе?

Я сделал поиски здесь на форумах, Google и Списках рассылки, но я не нашел релевантной информации.

Вы знаете лучше?

10
задан Kenny Meyer 12 April 2017 в 11:11
поделиться

4 ответа

По умолчанию строки документации присутствуют в файле байт-кода .pyc и загружаются из них (комментарии - нет). Если вы используете python -OO (флаг -OO означает «интенсивная оптимизация», в отличие от -O , который означает «умеренно оптимизировать»), вы получить и использовать файлы .pyo вместо файлов .pyc , и они оптимизированы путем исключения строк документации (в дополнение к оптимизации, выполненной -O , которая remove 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 байта и немного b это больше, когда модуль импортирован - но все записи .__ doc __ исчезают и заменяются на None ).

24
ответ дан 3 December 2019 в 13:51
поделиться

Да, docstrings считываются из файла, но это не должно останавливать их запись. Никогда никогда не компрометирует читабельность кода для производительности, пока Вы не сделаете тест производительности и не обнаружите, что то, о чем Вы беспокоитесь, на самом деле является тем узким местом в Вашей программе, которое вызывает проблему. Я бы подумал, что крайне маловероятно, что доктрина окажет сколько-нибудь заметное влияние на производительность в любой реальной ситуации.

10
ответ дан 3 December 2019 в 13:51
поделиться

Они получают чтение из файла (когда файл компилируется в pyc или когда загружается pyc - они должны быть доступны в объекте .__ doc__ ) но нет -> это не окажет существенного влияния на производительность ни при каких разумных обстоятельствах, или вы действительно пишете многомегабайтные строки документов?

5
ответ дан 3 December 2019 в 13:51
поделиться

У Python Docstrings и комментарии хранится в памяти, когда модуль Загружены?

DocStrings Completed в файл .pyc и загружаются в память. Комментарии отбрасываются во время компиляции и не оказывают влияния на что-либо, кроме незначительного дополнительного времени, необходимого, чтобы игнорировать их во время компиляции (что происходит один раз только после каких-либо изменений в файл .py, кроме основного сценария, который переносится каждый раз, когда это пробег).

также обратите внимание, что эти строки сохраняются только в том случае, если они являются первыми первыми в модуле, определении класса или определении функции. Вы можете включить дополнительные строки в целом в любом месте, но они будут отброшены во время компиляции, так как комментарии.

1
ответ дан 3 December 2019 в 13:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: