Python基础手册3——Python解释器

一、Python解释器

我们编写的Python代码都要放在Python解释器上运行,解释器是代码与计算机硬件之间的软件逻辑层。
当我们在操作系统上安装好Python之后,它就包含了保证Python运行的最小化组件:解释器 和 标准库。根据选用的Python版本的不同,解释器本身可以用C语言实现(Python的官方实现版本)、Java语言实现或者其他的形式。无论使用采用什么版本,编写好的Python程序代码必须放在解释器中运行。

1、Python代码的执行过程

将我们编写好的Python代码放到解释器中运行,此过程主要分为两步,第一步是将源码编译成“字节码”,第二步是将编译好的字节码转发到Python“虚拟机”中运行。当然对于程序员来说,这两步都是隐藏的。

(1)字节码编译

当我们运行Python代码时,Python解释器内部会先通过词法分析器将文件中的每一条代码语句分解为单一步骤,然后编译成字节码的形式。编译只是一个简单的翻译步骤,而且字节码是属于源代码层次范围内的底层代码,是与平台无关的,所以编译好的字节码是可以跨平台运行的。这些字节码可以提高执行速度,比起原始的源代码语句,字节码的运行速度要快很多。
如果Python进程在机器上拥有写入权限,那么它将把编译好的字节码保存为一个以 .pyc 为扩展名的文件。Python这样做是作为一种启动速度的优化,下一次运行程序的时候,如果你在上次保存字节码之后没有修改过源代码,Python将会直接加载 .pyc文件,并跳过编译这个步骤。如果你修改了源代码,下次运行程序时,字节码文件将自动重新创建。

(2)Python虚拟机(PVM)

当源文件编译成字节码,字节码就会发送到Python虚拟机(PVM)上来执行。事实上,PVM就是迭代运行字节码指令的一个大循环,一个接一个的完成操作。从技术上讲,这是Python解释器的最后一步。

相关的性能问题

和C/C++这类完全编译语言相比,Python的工作中没有 “build” 和 “make” 操作,也就是没有将源码编译成可以直接在机器上运行的二进制代码的过程。而且Python解释器中间形成的字节码并不是CPU可以直接运行的二进制代码,PVM仍然需要解释字节码成为二进制码,再交由CPU运行。所以Python代码无法运行的像C/C++一样快。

相关的开发意义

在程序开始执行之前不需要预编译和连接,只需要简单的输入并运行代码即可,这使得开发周期大大缩短。这同样使得Python具有更多的动态语言特性:在运行时,Python程序可以去构建并执行另一个Python程序,而且往往非常的方便。

2、Python 解释器的使用方法

有三种不同的办法来启动Python解释器。最简单的方式就是在命令行中启动Python解释器的交互模式,每次输入一行Python 代码来执行。另外一种方法是使用Python解释器运行Python 的代码文件。最后一种办法就是使用Python的集成开发环境(IDE)运行Python,集成开发环境通常整合了其他的工具,例如集成的调试器、文本编辑器、版本控制工具等。

(1)启动 Python 解释器的交互模式

交互模式根据用户的输入来运行代码并输出相应结果,但是他不会把代码保存到一个文件中。学习Python 的最好方法就是在交互式解释器中练习,在你需要测试一些模块时,交互式解释器也非常有用。

Python 解释器通常被安装在Linux系统中的 /usr/local/bin 或者 /usr/bin 目录下,将安装目录包含进 Linux 的PATH环境变量中,以确保可以直接通过输入 python 命令来启动它。

在Windows环境中,安装完Python环境后生成一个IDLE软件。打开软件我们可以使用类似 Linux Shell 的操作方式交互式的输入Python代码。

Python解释器从命令行读取命令时,我们称解释器工作于 交互模式。这种模式下它根据 主提示符 来执行,主提示符通常标识为三个大于号(>>>);继续的部分被称为 从属(次)提示符,由三个点标识 (...) (一般环境下可能不显示)。在第一行之前,解释器打印欢迎信息、版本号和授权提示。输入多行结构时需要从属提示符。

例如,下面这个 if 语句:

在交互模式下只能输入Python代码,而不能输入系统的命令。你必须运行完一条语句,然后才能输入另一条语句。对于简单语句来说,只要按下Enter键就可以运行输入的语句,对于复合语句,必须多提交一个空行来结束该语句。要告诉交互模式下的解释器已经输入完了多行语句,必须要插入一个空行,也就是说你必须按下Enter键两次,才能运行一条复合语句。

通常你可以在交互式解释器的主窗口中输入一个文件结束符(Linux系统是 Ctrl + D,Windows 系统是 Ctrl + Z)让解释器以 0 状态码退出。或者,你可以通过输入 quit() 命令退出解释器。

(2)使用解释器运行Python文件

Python 解释器有些操作类似 Linux shell,当在shell中直接调用解释器时为交互模式(以stdin作为标准输入),它交互的解释并执行命令;当使用文件名作为参数或以文件作为标准输入调用解释器时,它读取文件并将文件作为脚本执行。

Python 脚本使用扩展名 .py,Linux平台还可以在不明确指定 Python 解释器的情况下,直接运行Python文件。 这种情况下你需要在你的脚本的第一行指定我们所使用的Python解释器的路径:#! /usr/bin/env python。

当然我们需要确保Linux的 env 环境变量的 PATH 变量中包含Python解释器的路径。

注意:在Linux系统中,我们直接执行Python脚本文件时,需要文件对执行用户有执行权限。

启动 Python 解释器还可以使用 python -c command [arg] ...,这种方法可以在 命令行 执行 Python 语句,类似于 shell 中的 -c 选项。由于 Python 语句通常会包含空格或其他特殊 shell 字符,一般建议将 命令 用单引号包裹起来。

有一些 Python 模块也可以当作脚本使用。你可以使用 python -m module [arg] ... 命令调用它们,这类似在命令行中键入完整的路径名来执行 模块 源文件一样。

使用脚本文件时,经常会运行脚本然后进入交互模式。这也可以通过在脚本之前加上 -i 参数来实现。

调用解释器时,脚本名和附加参数会传入到一个名为 sys.argv 的字符串列表。通过导入 sys 模块,执行 sys.argv[0],sys.argv[1]... 获取这个列表中的元素。列表的长度大于等于1,没有给定脚本和参数时,它至少也有一个元素:sys.argv[0] ,此时他为空字符串。
脚本名指定为 '-' (表示标准输入)时, sys.argv[0] 被设定为 '-';使用 -c 指令 时, sys.argv[0] 被设定为 '-c';使用 -m 模块 参数时,sys.argv[0]被设定为指定模块的全名 -c指令 或者 -m 模块 之后的参数不会被 Python 解释器的选项处理机制所截获,而是留在 sys.argv 中,供脚本命令操作。

Python命令选项:

(3)使用 PythonIDE(pycharm)编辑Python文件

Python的IDE使用方式和其他语言并无大的区别,这里我们通常使用pycharm软件在windows系统下开发Python程序。
由于Python是可以跨平台运行的(Python文件直接运行在虚拟机上,不用关心具体硬件和操作系统),所以通常我们在Windows环境下开发的脚本可以直接运行在Linux环境下。对于在Linux环境下开发的大型项目或使用框架开发的项目,可能需要在Linux环境下运行项目而且可能有很多的环境依赖。这时我们甚至可以配置pycharm直接同步服务器端的代码到本地,还可以配置使用服务器端的开发环境,在本地直接执行远端服务器的运行命令,并将远端的运行结果同步回本地。
关于pycharm软件的使用我们会专门出一节教程。



《Python基础手册》系列:

Python基础手册 1 —— Python语言介绍
Python基础手册 2 —— Python 环境搭建(Linux)
Python基础手册 3 —— Python解释器
Python基础手册 4 —— 文本结构
Python基础手册 5 —— 标识符和关键字
Python基础手册 6 —— 操作符
Python基础手册 7 —— 内建函数
Python基础手册 8 —— Python对象
Python基础手册 9 —— 数字类型
Python基础手册10 —— 序列(字符串)
Python基础手册11 —— 序列(元组&列表)
Python基础手册12 —— 序列(类型操作)
Python基础手册13 —— 映射(字典)
Python基础手册14 —— 集合
Python基础手册15 —— 解析
Python基础手册16 —— 文件
Python基础手册17 —— 简单语句
Python基础手册18 —— 复合语句(流程控制语句)
Python基础手册19 —— 迭代器
Python基础手册20 —— 生成器
Python基础手册21 —— 函数的定义
Python基础手册22 —— 函数的参数
Python基础手册23 —— 函数的调用
Python基础手册24 —— 函数中变量的作用域
Python基础手册25 —— 装饰器
Python基础手册26 —— 错误 & 异常
Python基础手册27 —— 模块
Python基础手册28 —— 模块的高级概念
Python基础手册29 —— 包

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335