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

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

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

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

你知道吗

只是为了澄清,文档字符串不是注释。 它们是相似的,并且具有相似的用途,但是docstring实际上是函数/对象的属性,而我认为除了实际读取.py文件本身之外,不能以任何其他方式访问注释。

恐惧会占用多少内存? 每个字符超过1个字节? 您是否正在为Timex Sinclair 1000编程?

默认情况下,文档字符串存在于.pyc字节码文件中,并从中加载(不包含注释)。如果使用python -OO(-OO标志代表"强烈优化",而-O标志代表"适度优化"),则获取并使用.pyo文件而不是.pyc文件,通过省略文档字符串进行了优化(除了-O所做的优化(删除了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

您可以进行以下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代替)。

现在清楚了。 很好的答案。

顺便说一下,不是文档字符串的独立字符串(不在函数,类或模块的顶部)在任何优化级别均不会生成任何代码。 它们不在.pyc或.pyo文件中。 它们是真正的多行注释。

是的,文档字符串是从文件中读取的,但这不应该阻止您编写它们。在进行性能测试并发现担心的问题实际上是程序中导致问题的瓶颈之前,请不要为了性能而牺牲代码的可读性。我认为文档字符串在任何现实情况下都不会对性能产生任何可衡量的影响。

它们是从文件中读取的(将文件编译为pyc或加载pyc时-必须在object.__doc__下可用),但不会->在任何合理的情况下,这都不会显着影响性能,或者你真的在写数兆字节的文档字符串吗?

+1好而幽默的答案,不,我不写数兆字节的文档字符串;)

Do Python docstrings and comments are

stored in memory when module is

loaded?

文档字符串被编译到.pyc文件中,并被加载到内存中。注释在编译过程中被丢弃,对编译没有任何影响,只是在编译过程中忽略它们花费了很少的额外时间(仅在对.py文件进行任何更改后才会发生一次,但主脚本每次都会重新编译一次)。跑)。

还要注意,仅当这些字符串是模块,类定义或函数定义中的第一件事时才保留这些字符串。您几乎可以在任何地方添加其他字符串,但是它们会像注释一样在编译期间被丢弃。

python文档字符串和注释的区别,加载模块时,Python文档字符串和注释是否存储在内存中?...相关推荐

  1. python没有错误但是不显示结果_为什么我在Python3中加载模块时遇到问题但在Python2中没有加载?...

    根据我使用的 Python安装,我在加载模块时遇到了一些问题.当我输入 from quantecon import approx_markov 在使用Python 3.4.0的终端中,返回以下错误消息 ...

  2. python自带的对称算法_一种基于对称算法和专用加载模块的Python程序模块加密方法...

    一种基于对称算法和专用加载模块的Python程序模块加密方法 [专利说明]一种基于对称算法和专用加载模块的Python程序模块加密方法 技术领域 [0001]本发明涉及一种网络安全技术,具体涉及一种P ...

  3. ArcGIS中加载模块时dojo/domReady!和dojo/ready的区别

    我们在使用ArcGIS Javascript  API开发时,最开始要先加载模块: <script>require(["esri/map", "dojo/do ...

  4. 利用Crowbar抓取网页异步加载的内容 [Python俱乐部]

    利用Crowbar抓取网页异步加载的内容 [Python俱乐部] 利用Crowbar抓取网页异步加载的内容 [Python俱乐部] 利用Crowbar抓取网页异步加载的内容 在做 Web 信息提取.数 ...

  5. go加载python_人生苦短我用python(02)动态加载模块-Go语言中文社区

    文章内容为原创,欢迎转载请注明出处 作者: EflyPro->晦明禅师 文章来源:公众号"睿江云计算" 继第一期[人生苦短我用Python系列专栏]发布后,深受广大睿普迷的一 ...

  6. python动态加载模块有什么用_人生苦短我用python(02)动态加载模块

    继第一期[人生苦短我用Python系列专栏]发布后,深受广大睿普迷的一致好评,经常问小普第二期什么时候出呀?好期待~ 来来来小普这就呈上第二期[02动态加载模块] 错过了第一期的小伙伴们可以点此穿越哦 ...

  7. Visual Studio点击之前创建的Form提示“由于从未加载设计器的文档,因此无法显示设计器”

    现象 打开之前创建的工程,点击其中一个Form后,提示"由于从未加载设计器的文档,因此无法显示设计器",打不开界面,点击其他Form可以正常打开,就这个打开不了. 解决方法 把工程 ...

  8. python重新加载模块_jupyter实现重新加载模块

    最近几年,jupyter在全球数据科学领域,已经成为不可或缺的重要工具. 在jupyter中用python写程序,若import了自己写的外部模块,如果这个外部模块有更新,再次执行import,jup ...

  9. word2vec实例详解python_在python下实现word2vec词向量训练与加载实例

    项目中要对短文本进行相似度估计,word2vec是一个很火的工具.本文就word2vec的训练以及加载进行了总结. word2vec的原理就不描述了,word2vec词向量工具是由google开发的, ...

  10. 利用Python进行数据分析(四):数据加载、存储与文件格式

    标题利用Python进行数据分析(四):数据加载.存储与文件格式 学习笔记来源于:简书https://www.jianshu.com/p/047d8c1c7e14 输入输出通常可以划分为几个大类:读取 ...

最新文章

  1. 知识图谱升温之势已现,不要错失下一个AI风口
  2. 河南省高中毕业会考计算机考试,河南高中会考等级划分标准
  3. Hibernate(一)__简介
  4. python opencv 打开图像时报错 (-215:Assertion failed) size.width0 size.height0 in function 'cv::imshow'
  5. 计算机基础原理知识,计算机基础知识之计算机的工作原理
  6. Linux启动容器端口,docker安装 创建镜像 启动容器 的 使用方法
  7. Jquery第一章表格新增功能课后练习第二节2/2
  8. matlab爱心函数代码画图
  9. c语言处理系统步骤,c语言源代码【处理步骤】
  10. 原来win7专业版64位 MBR方式安装win10专业版_x86
  11. kubernetes pod 挂载 ceph rbd
  12. AI 助力智慧城市发展 | 腾讯视觉峰会回顾
  13. 一个屌丝程序员的青春(一三二)
  14. xms和xmx为什么要相同_为什么结婚蚕丝被,一定要有双宫茧子母被?
  15. 游码编程之Python代码应用
  16. 阿里研究院发布《2020中国区块链发展报告》,毛球科技助力数字经济加速发展
  17. 基于语音识别的QT设计的csgo互动类视频游戏
  18. 因为是程序员,被亲戚鄙视了!
  19. 一键设置IP地址(快速设置ip地址)
  20. 如何在线生成动态gif图片?轻松一键教你在线制作gif

热门文章

  1. 打印时显示预服务器,域服务器如何设置打印机
  2. MyBatis可视化代码生成工具
  3. 向Spring大佬低头——大量源码流出解析
  4. 詹森不等式的积分形式
  5. 触摸屏调出虚拟键盘_win7系统中打开虚拟键盘的两种方法(屏幕键盘)
  6. Unity Shader入门精要--第4 章 学习Shader 所需的数学基础:矩阵
  7. H3C交换机常用命令
  8. wav怎么转换成mp3?
  9. 用C#写经理评分系统
  10. eNSP华为模拟器使用——(11)eNSP模拟无线AC和AP