zoukankan      html  css  js  c++  java
  • Python解释执行原理

    Python解释执行原理

    C或C++之类的编译型语言是将源码编译成机器可以直接执行的二进制文件,当运行二进制可执行程序时,直接将二进制文件从硬盘载入内存中并运行。

    Python执行源代码文件时,会先将源文件编译成字节码bytecode,然后再由Python虚拟机PVM来执行这些字节码。

    字节码

    字节码在Python虚拟机程序里对应的PyCodeObject对象。.pyc是字节码在硬盘上的表现。

    PyCodeObject对象的创建时机是模块加载的时候,即import。

    pyc文件

    1. 当执行python test.py时,会将其编译成字节码后解释执行,但不会生成.pyc文件。如果想生成test.pyc,可以使用内置模块py_compile
    2. 如果test.py加载了其他模块,Python会对其他模块编译成字节码,生成.pyc文件。编译后的字节码.pyc后缀文件保存至模块所在目录中的__pycache__目录中。
    3. 当Python程序第二次执行时,会先在模块的__pycache__目录中查看pyc文件,如果没找到,或者找到了,但是pyc文件的修改时间和源模块的修改时间不同,则会重复第二步。

    关于该设计方式的思考

    1. Python是否保存成pyc文件和我们在设计缓存系统时是一样的,我们可以仔细想想,什么该扔到缓存里,什么不该扔到缓存里。
    2. 在运行一个耗时的Python脚本时,如何能够稍微缩短一些程序的运行时间,就是将模块从主模块分开。
    3. 在设计一个软件系统时,重用和非重用的东西是不是也应该分开来对待,这是软件设计原则的重要部分。
    4. 在设计缓存系统(或者其他系统时),如何来避免程序的过期。
  • 相关阅读:
    入门菜鸟
    FZU 1202
    XMU 1246
    Codeforces 294E Shaass the Great 树形dp
    Codeforces 773D Perishable Roads 最短路 (看题解)
    Codeforces 814E An unavoidable detour for home dp
    Codeforces 567E President and Roads 最短路 + tarjan求桥
    Codeforces 567F Mausoleum dp
    Codeforces 908G New Year and Original Order 数位dp
    Codeforces 813D Two Melodies dp
  • 原文地址:https://www.cnblogs.com/ChiRou/p/14904741.html
Copyright © 2011-2022 走看看