Python学习——学习笔记(二)

 Python如何运行程序


程序员的视角

  • 就最简单的形式而言,一个Python程序仅是一个包含Python语句的文本文件。例如,下面这个命为script0.py的文件,是我们能够想到的最简单的Python脚本,但它算得上是一个典型的Python程序:
    print(‘hello world’) print(2 ** 100)
    这个文件包含了两个Python打印语句,在输出流中简单地打印一个字符串(引号中的文字)和一个数学表达式的结果(2*100)。

  • 经在Windows上安装好Python时,这就是Python在开始菜单中显示的情况:

    这里写图片描述

  • 运行script0.py文件后:
    这里写图片描述


Python的视角

  • 在文本文件中输入代码,之后在解释器中运行这些代码。然而,当Python“运行”时,透过表面,还有一些事情发生。尽管了解Python内部并不是Python
    编程所必需的要求,然而对Python的运行时结构有一些基本的了解可以帮助你从宏观上掌 握程序的执行。
    当Python运行脚本时,在代码开始进行处理之前,Python还会执行一些步骤。确切地说,第一步是编译成所谓的“字节码”,之后将其转发到所谓的“虚拟机”中。
  • 字节码编译

    当程序执行时,Python内部(对大多数用户是完全隐藏的)会先将源代码(文件中的语句)编译成所谓字节码的形式。编译是一个简单的翻译步骤,而且字节码是源代码底层的、与平台无关的表现形式。概括地说,Python通过把每一条源语句分解为单一步骤来将这些 源语句翻译成一组字节码指令。这些字节码可以提高执行速度:比起文本文件中原始的源 代码语句,字节码的运行速度要快得多。
    如果Python无法在机器上写入字节码,程序仍然可以工作:字节码将会在内存中生成并 在程序结束时简单地丢弃[1]。尽管这样,由于.pyc文件能够加速启动,你最好保证在大型程 序中可以写入。字节码文件同样是分发Python程序的方法之一:如果Python找到的都是.pyc文件,它也很乐意运行这个程序,尽管这里没有原始的.py源代码文件


Python虚拟机(PVM)

一旦程序编译成字节码(或字节码从已经存在的.pyc文件中载入),之后的字节码发送 到通常称为Python虚拟机(Python Virtual Machine,简写为PVM)上来执行。PVM听起来比 它本身给人的印象更深刻一些。实际上,它不是一个独立的程序,不需要安装。事实上,PVM就是迭代运行字节码指令的一个大循环,一个接一个地完成操作。PVM是Python的运 行引擎,它时常表现为Python系统的一部分,并且它是实际运行脚本的组件。从技术上讲,它才是所谓“Python解释器”的最后一步

  • 性能的含义
    熟悉C和C++这类完全编译语言的读者或许已经发现了Python模式中的一些不同之处。其中一个是,在Python的工作中通常没有”build”或”make”的步骤:代码在写好之后立即运行。另外一个就是,Python字节码不是机器的二进制代码(例如,Intel芯片的指令)。字节码是 特定于Python的一种表现形式。

    这就是Python代码无法运行得像C或C++代码一样快的原因,就像第1章描述的那样:PVM循环(而不是CPU芯片)仍然需解释字节码,并且字节码指令与CPU指令相比需要更多的工作。另一方面,和其他经典的解释器不同,这里仍有内部的编译步骤:Python并不需要反复地重分析和重分解每一行语句。实际的效果就是纯Python代码的运行速度介于传 统的编译语言和传统的解释语言之间。

  • 开发的含义
    Python执行模块的另一个情况是其开发和执行的环境实际上并没有区别。也就是说,编译和执行源代码的系统是同一个系统。这种相似性对于拥有传统编译语言背景的读者来 说,更有意义,然而在Python中,编译器总是在运行时出现,并且是运行程序系统的一部分。
    这使开发周期大大缩短。在程序开始执行之前不需要预编译和连接;只需要简单地输 入并运行代码即可。这同样使Python具有更多的动态语言特性:在运行时,Python程序去构 建并执行另一个Python程序是有可能的,而且往往是非常方便的。例如,eval和exec内置模 块,能够接受并运行包含Python程序代码的字符串。这种结构是Python能够实现产品定制的原因:因为Python代码可以动态地修改,用户可以改进系统内部的Python部分,而不需要拥 有或编译整个系统的代码。
    从更基础的角度来说,牢记我们在Python中真正拥有的只有运行时:完全不需要初始的编译阶段,所有的事情都是在程序运行时发生的。这甚至还包括了建立函数和类的操作以及连接的模块。这些事情对于静态语言往往是发生在执行之前的,而在Python中是与程序 的执行同时进行的。就像我们看到的那样,实际的效果就是Python比一些读者所用的程序 语言带来了更加动态的编程体验。


习题

  1. 什么是Python解释器?
    Python解释器是运行Python程序的程序。
  2. 什么是源代码?
    源代码是为程序所写的语句:它包括了文本文件(通常以.py为后缀名)的文本。
  3. 什么是字节码?
    字节码是Python将程序编译后所得到的底层形式。Python自动将字节码保存到后缀 名为.pyc的文件中。
  4. 什么是PVM?
    .PVM是Python虚拟机,它是Python的运行时引擎解释编译得到的代码。
  5. 请列出两个Python标准执行模块的变体的名字。
    Psyco、Shedskin以及forzen binaries是执行模块的所有变体。
  6. CPython、Jython以及IronPython有什么不同?
    .CPython是Python语言的标准实现。Jython和IronPython分别是Python程序的Java 和.NET的实现;它们都是Python的编译器的替代实现。

猜你喜欢

转载自blog.csdn.net/weixin_42621019/article/details/81840112