zoukankan      html  css  js  c++  java
  • Python如何运行程序

    人生苦短,我用Python。

    作为一个开发人员,如何写代码是必须要知道的,代码如何运行也是有必要了解的。通过了解代码如何运行,可指导我们写出效率更高的代码。下午看了《Python学习手册》第二章,了解了一些比较有趣的东西,因此做个总结。

    let's do it

    Python解释器

    提到Python印象大多是编程语言。其实Python是一个名为解释器的软件包,通俗一点解释器就是将你的代码解释给计算机。

    官方点,解释器是代码与机器的计算机硬件之间的软件逻辑层。

    当安装Python后,他会生成一些组件:至少包括一个解释器和一套支持库。

    根据使用情况不同,解释器可能采取可执行程序的形式,或做为链接到另一个程序的库

    根据版本不同,解释器本身可以用 C程序实现,或一些Java类实现。

    无论如何Python代码必须在解释器上运行

      程序执行

       惯例,Python文件都是以.py结尾, 但是从技术上来讲,这种命名方案在被“导入”时才是必须的。

    当Python运行脚本时,在代码运行前还要做一些工作。

    1. 将源码编译成字节码(不是机器码)
    2. 将编译的字节码放到Python虚拟机(PVM)中运行

    字节码编译

    编译是一种简单的翻译步骤,字节码是一种低级的,与平台无关的表现形式(可移植性)这些字节码可以提高执行速度,比源码快得多。

    如果Python进程有写入权限,那么他会把字节码保存为一个.pyc为扩展名的文件,3.2之后版本将其放在__pycache__的子目录中,方便下次PVM跳过编译直接取用,没有写入权限的话运行程序还是会翻译成字节码,只不过放内存,程序杀死之后就被丢弃。

    Python会检测源文件是否改变,没变就直接用上次的.pyc。

    对于Python版本,.pyc的文件名中包含版本,因此可区别不同版本编译的.pyc

    .pyc文件起到加速启动的作用,类似于操作系统的缓存,只不过是执行了一部分再缓存。

    Python虚拟机(PVM)

    PVM用来执行字节码文件。 但实际上它不是一个独立的程序,不用安装,

    本质其实就是一个迭代执行字节码指令的大循环,一步步的完成操作。期间会将字节码编译成二进制码。

    因此,最终的效果是纯Python代码执行速度介于传统编译语言和传统解释性语言之间(cache的作用)

    对开发的意义:编译和执行的的环境是同一个,。因此编译器总在运行时出现,这就使Python程序在运行时去构建和执行另一个Python程序成为可能


     执行模型的变体

    除了传统的实现模式,Python还有很多实现,简单说一下

    • CPython:标准Python  

    由可移植的ANSI C语言代码编写而成,一般来说用的都是这个

    特点:运行速度最快、最完整、最新、最健全。上面的图便是CPython的运行时体系结构。

    • Jython:基于Java的Python

    与Java进行集成

    • IronPython:基于.Net的Python
    • Stackless:注重并发的Python
    • PyPy:注重速度的Python        比较有潜力,特别是在CPU密集型代码,计算领域(AI)

    随着Python的持续升温,相信以后更加高效的执行模型会出来。


       

     冻结二进制文件

    最后记录下这个,就是生成的可执行文件(独立的二进制可执行), 有种打包发布的意思

    有许多系统可以生成随平台特性变化的冻结二进制文件

    冻结二进制文件其实就是将字节码和PVM混合在一起形成的一个独立组件。由于代码嵌入在冻结二进制文件中,对于接收者来说,代码是看不见的。

    这样便实现的单文件的封装,终端用户都不用安装Python就可以运行这些程序。

     
     如何运行大概知道了。
     学习尚浅,有错误或不当之处还请指正。
  • 相关阅读:
    java冒泡排序
    正则表达式手册
    简单介绍事务
    Java经典编程30题(中)
    Java经典编程30题(下)
    负载均衡-Nginx
    react入门
    Mybatis && Mybatis-plus
    java设计模式-委派模式
    java8新特性
  • 原文地址:https://www.cnblogs.com/hao11/p/11711009.html
Copyright © 2011-2022 走看看