python解释器如何处理basic.py文件?

2024-05-19 01:17:24 发布

您现在位置:Python中文网/ 问答频道 /正文

最近我一直在尝试深入研究python的核心。目前我正在研究pythons模块系统,以及如何存储“全局”、“局部”和“非局部”变量。更具体地说,我的问题是解释器如何处理正在运行的文件?它是否被视为模块中自己的模块(或类似的模块)?你知道吗


Tags: 模块文件核心系统局部全局解释器pythons
2条回答

顶层脚本被视为一个模块,但有一些区别。你知道吗

  • 它的名称不是脚本名减去.py扩展名,而是^{}。你知道吗
  • 顶级脚本不会在.pyc缓存中查找,也不会在那里编译和缓存。你知道吗

除此之外,基本上是一样的:解释器将您的脚本编译为一个模块,从中构建一个types.ModuleType,存储在sys.modules['__main__'],等等

另外看看^{},它解释了python spam.pypython-m spam是如何工作的。(我认为,在3.4中,runpy.run_path应该做与运行脚本完全相同的事情,而不仅仅是非常相似的事情。)注意,docs链接到the source,因此如果您需要查找任何内部细节,您可以。你知道吗


第一个区别是为什么你经常看到这个成语:

if __name__ == '__main__':
    import sys
    main(sys.argv) # or test() or similar

这允许将同一个文件spam.py用作模块(在这种情况下,它的__name__将是spam)或脚本(在这种情况下,它的__name__将是__main__),代码只希望在脚本情况下运行。你知道吗


如果您想知道交互式解释器的标准输入是否与脚本的处理方式相同,那么还有很多不同之处。最重要的是,每个语句都作为一个带有exec的语句编译和运行,而不是整个脚本/模块作为一个模块编译和运行。你知道吗

是的,基本上就是这样。它是^{}模块。您可以通过运行类似于以下内容的操作来看到这一点:

x = 3
import __main__
print(__main__.x)

无论是作为脚本文件运行,还是在解释器上运行,都将打印:

3

相关问题 更多 >

    热门问题