Skip to main content
 首页 » 编程设计

python之如何/应该如何在 Python/其他语言中管理跨包模块中的全局数据

2025年05月04日14sharpest

我正在尝试为一种既可以编译又可以解释的编程语言 ( Heron ) 设计包和模块系统,据我所知,我真的很喜欢 Python 方法。 Python 有丰富的模块选择,这似乎在很大程度上促成了它的成功。

我不知道的是,如果一个模块包含在两个不同的编译包中,在 Python 中会发生什么:数据是单独的副本还是共享的?

与此相关的是一堆附带问题:

  1. 我假设包可以用 Python 编译是否正确?
  2. 这两种方法(复制或共享模块数据)的优缺点是什么?
  3. 从 Python 社区的角度来看,Python 模块系统是否存在广为人知的问题?例如,是否正在考虑用于增强模块/包的 PEP?
  4. Python 模块/包系统的某些方面是否不适用于编译语言?

请您参考如下方法:

嗯,你问了很多问题。以下是一些进一步深入的提示:

  1. 一个。 Python 代码被词法分析并编译为 Python 特定指令,但未编译为机器可执行代码。每当您运行与现有 .pyc 时间戳不匹配的 python 代码时,都会自动创建“.pyc”文件。该功能可以关闭。您可能会使用 dis 模块来查看这些说明。 b.当一个模块被导入时,它在它自己的命名空间中执行(从上到下),并且该命名空间被全局缓存。当您从另一个模块导入时,该模块不会再次执行。请记住 def 只是一个语句。您可能希望在代码中放置一个 print('compiling this module') 语句来跟踪它。

  2. 视情况而定。

  3. 最近有增强功能,主要围绕指定需要加载的模块。模块可以有相对路径,因此一个巨大的项目可能有多个同名模块。

  4. Python 本身不适用于编译语言。谷歌“unladen swallow blog”可以看到试图加速一种语言的磨难,其中“a = sum(b)”可以在执行之间改变含义。在极端情况之外,模块系统在源代码和已编译的库系统之间形成了一个很好的桥梁。该方法效果很好,Python 对 C 代码(swig 等)的简单包装也很有帮助。