系统相关
首页 > 系统相关> > 加载模块时,Python文档字符串和注释是否存储在内存中?

加载模块时,Python文档字符串和注释是否存储在内存中?

作者:互联网

Are Python docstrings and comments stored in memory when a module is loaded?

我想知道这是否属实,因为我通常会很好地记录我的代码;这可能会影响内存使用吗?

通常每个Python对象都有一个__doc__方法.这些文档字符串是从文件中读取还是以其他方式处理?

我在论坛,谷歌和邮件列表中进行了搜索,但我没有找到任何相关信息.

你知道的更好吗?

解决方法:

默认情况下,文档字符串存在于.pyc字节码文件中,并从中加载(注释不是).如果你使用python -OO(-OO标志代表“强烈优化”,而不是-O代表“温和地优化”),你得到并使用.pyo文件而不是.pyc文件,并通过省略优化文档字符串(除了由-O完成的优化之外,还删除了断言语句).例如,考虑一个文件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

你可以有以下shell会话…:

$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(或等效地,触摸foo.py,以便Python知道.pyo“已过时”)意味着Python重建它(在这种情况下,在磁盘上保存123个字节,并且稍微有点更多模块导入时 – 但所有.__ doc__条目消失并被None替换).

标签:python,memory-management,comments,docstring
来源: https://codeday.me/bug/20191007/1869572.html