Python 解释器使用

                     

贡献者: 落羽清玄; addis

  • 本文存在未完成的内容。
  • 本文处于草稿阶段。
预备知识 计算机语言 — 脚本语言(解释型语言),Python 简介与安装

   Python 解释器由编译器和虚拟机构成,编译器将源代码转换成字节码,然后再通 Python 虚拟机来逐行执行这些字节码。

python 程序执行过程:

  1. 执行 .py 文件,就会启动 python 解释器
  2. 编译器将源文件解释成字节码
  3. 虚拟机将字节码转化成机器语言,与操作系统交互
  4. 程序运行结束后,将字节码存到 pyc 文件,便于后续直接执行

1. 调用解释器

   Python 解释器在其被使用的机器上通常安装为 /usr/local/bin/python3.8;将 /usr/local/bin 加入你的 Unix 终端的搜索路径就可以通过键入以下命令来启动它:

python3.8

   就能运行了1。安装时可以选择安装目录,所以解释器也可能在别的地方;可以问问你身边的 Python 大牛,或者你的系统管理员。(比如 /usr/local/python 也是比较常用的备选路径)

   在 Windows 机器上当你从 Microsoft Store 安装 Python 之后,python3.8 命令将可使用。如果你安装了 py.exe 启动器,你将可以使用 py 命令。

   在主提示符中输入文件结束字符(在 Unix 系统中是 Control-D,Windows 系统中是 Control-Z)就退出解释器并返回退出状态为 0。如果这样不管用,你还可以写这个命令退出:quit()

   解释器的行编辑功能在支持 GNU Readline 库的系统中也包括交互式编辑,历史替换和代码补全等。检测是否支持行编辑最快速的方式是在首次出现 Python 提示符时输入 Control-P。如果听到 “哔” 提示音,就说明支持行编辑。如果什么都没发生,或是回显了 ^P,说明不支持行编辑;你只能用退格键从当前行中删除字符。

   解释器运行的时候有点像 Unix 命令行:在一个标准输入 tty 设备上调用,它能交互式地读取和执行命令;调用时提供文件名参数,或者有个文件重定向到标准输入的话,它就会读取和执行文件中的 脚本。

   另一种启动解释器的方式是 python -c command [arg] ...,其中 command 要换成想执行的指令,就像命令行的 -c 选项。由于 Python 代码中经常会包含对终端来说比较特殊的字符,通常情况下都建议用英文单引号把 command 括起来。

   有些 Python 模块也可以作为脚本使用。可以这样输入:python -m module [arg] ...,这会执行 module 的源文件,就跟你在命令行把路径写全了一样。

   在运行脚本的时候,有时可能也会需要在运行后进入交互模式。这种时候在文件参数前,加上选项 -i 就可以了。

1.1. 传入参数

   如果可能的话,解释器会读取命令行参数,转化为字符串列表存入 sys 模块中的 argv 变量中。执行命令 import sys 你可以导入这个模块并访问这个列表。这个列表最少也会有一个元素;如果没有给定输入参数,sys.argv[0] 就是个空字符串。如果给定的脚本名是 '-' (表示标准输入),sys.argv[0] 就是 '-'。使用 -c command 时,sys.argv[0] 就会是 '-c'。如果使用选项 -m module,sys.argv[0] 就是包含目录的模块全名。在 -c command 或 -m module 之后的选项不会被解释器处理,而会直接留在 sys.argv 中给命令或模块来处理。

1.2. 交互模式

   在终端(tty)输入并执行指令时,我们说解释器是运行在 交互模式(interactive mode)。在这种模式中,它会显示 主提示符(primary prompt),提示输入下一条指令,通常用三个大于号(>>>)表示;连续输入行的时候,它会显示 次要提示符,默认是三个点(...)。进入解释器时,它会先显示欢迎信息、版本信息、版权声明,然后就会出现提示符:

:python3.8
Python 3.8 (default, Sep 16 2015, 09:25:04)
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
多行指令需要在连续的多行中输入。比如,以 if 为例:
>>>
>>> the_world_is_flat = True
>>> if the_world_is_flat:
...     print("Be careful not to fall off!")
...
Be careful not to fall off!

2. 解释器的运行环境

2.1.源文件的字符编码

   默认情况下,Python 源码文件以 UTF-8 编码方式处理。在这种编码方式中,世界上大多数语言的字符都可以同时用于字符串字面值、变量或函数名称以及注释中——尽管标准库中只用常规的 ASCII 字符作为变量或函数名,而且任何可移植的代码都应该遵守此约定。要正确显示这些字符,你的编辑器必须能识别 UTF-8 编码,而且必须使用能支持打开的文件中所有字符的字体。

   如果不使用默认编码,要声明文件所使用的编码,文件的 第一 行要写成特殊的注释。语法如下所示:

# -*- coding: encoding -*-
其中 encoding 可以是 Python 支持的任意一种 codecs。

   比如,要声明使用 Windows-1252 编码,你的源码文件要写成:

# -*- coding: cp1252 -*-
关于 第一行 规则的一种例外情况是,源码以 UNIX "shebang" 行 开头。这种情况下,编码声明就要写在文件的第二行。例如:

#!/usr/bin/env python3
# -*- coding: cp1252 -*-

3. Shebang

   #!/usr/bin/python3 仅仅在linuxunix系统下有作用,在windows下无论在代码里加什么都无法直接运行一个文件名后缀为.py 的脚本,因为在 windows 下文件名对文件的打开方式起了决定性作用。

#!/usr/bin/env python
或者
#!/usr/bin/python

如何理解

   把这一行语句拆成两部分。第一部分是 #!;第二部分是 /usr/bin/python 或者 /usr/bin/env python。关于 #! 这个符号,其实它是有名字的,叫做 Shebang 或者 Sha-bang,有的翻译组将它译作 释伴,即 “解释伴随行” 的简称,同时又是 Shebang 的音译。

   Shebang 通常出现在类 Unix 系统的脚本中第一行,作为前两个字符。在 Shebang 之后,可以有一个或数个空白字符,后接解释器的绝对路径,用于指明执行这个脚本文件的解释器

... # python
等阶
... # usr/bin/python

   如果不加 #! 的话,你每次执行这个脚本时,都得这样 python xx.py

... # python hellp.py
hello

   有没有一种方式?可以省去每次都加 python 呢?

   当然有,在文件头里加上 #!/usr/bin/python,那么当这个文件有可执行权限 时,只直接写这个脚本文件,就像下面这样

... # ./hellp.py
hello

   那么 !/usr/bin/env python 是什么意思?

   当执行 env python 时,自动进入了 python console 的模式。

   当你执行 env python 时,它其实会去 env | grep PATH 里(也就是 /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)这几个路径里去依次查找名为 python 的可执行文件,并且找到一个就直接执行。上面我们的 python 路径是在 /usr/bin/python 里,在 PATH 列表里倒数第二个目录下,所以当我在 /usr/local/sbin 下创建一个名字也为 python 的可执行文件时,就会执行 /usr/bin/python 了。

   个人感觉应该优先使用 #!/usr/bin/env python,因为不是所有的机器的 python 解释器都是 /usr/bin/python。

4. coding = utf-8

# -*- coding: UTF-8 -*-
或者
# coding=utf-8

5. python 解释器有很多种:

   下一篇文章:Python 词法与分析


1. ^ 在 Unix 系统中,Python 3.x 解释器默认安装后的执行文件并不叫作 python,这样才不会与同时安装的 Python 2.x 冲突。


致读者: 小时百科一直以来坚持所有内容免费无广告,这导致我们处于严重的亏损状态。 长此以往很可能会最终导致我们不得不选择大量广告以及内容付费等。 因此,我们请求广大读者热心打赏 ,使网站得以健康发展。 如果看到这条信息的每位读者能慷慨打赏 20 元,我们一周就能脱离亏损, 并在接下来的一年里向所有读者继续免费提供优质内容。 但遗憾的是只有不到 1% 的读者愿意捐款, 他们的付出帮助了 99% 的读者免费获取知识, 我们在此表示感谢。

                     

友情链接: 超理论坛 | ©小时科技 保留一切权利