您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

认情况下,文档字符串存在于.pyc字节码文件中,并从中加载(不包含注释)。如果您使用python -OO-OO标志代表“强烈优化”,而标志代表“-O适度优化”),则您获取并使用.pyo文件而不是.pyc文件,并且通过省略文档字符串对文件进行了优化(除了由-Oassert例如,删除一个包含以下内容文件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(或等效地,touch foo.py以便Python知道它.pyo是“过时的”)意味着Python对其进行了重建(并且在这种情况下,节省了123个字节在磁盘上,并且在导入模块时节省了更多字节)-所有.__doc__条目都会消失,并由代替None

python 2022/1/1 18:35:01 有229人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶