Python3.8技术手册

使用Python解释器

1.1 Python安装

从源码编译安装python
./configure
make
make test
sudo make install
默认python解释器安装在/usr/local/bin/python3.8,可以将/usr/local/bin放到path搜索路径中。
在windows系统上,python一般安装在C:\Python38,在windows 命令行中,执行命令set path=%path%;C:\python38 将该路径添加到path搜索路径。

1.2 使用解释器

在类linux系统中,在console控制台输入python3.8 即可运行,退出CTL+D(文件结束符)或者

quit()

在windows系统上,打开命令行输入python即可运行,退出CTL+Z(文件结束符)或者quit()

解释器的行编辑功能也包括交互式编辑,在支持 readline 的系统中,可以回看历史命令,也有 Tab 代码补全功能。检查是否支持行编辑功能,在出现提示符后,CTL+P。如果
有‘哔’的一声或者出现一行字符串(如下图),那么就是支持行编辑功能;

如果什么都没出现或者显示^P 那么不支持行编辑。只能用Backspace退格键从当前行删除字符。

python [-bBdEhiIOqsSuvVWx?] [-c command | -m module-name | script | - ] [args]
python -h 可以查看帮助信息

在标准输入tty设备调用解释器,他能交互式地读取和执行命令,调用时如果提供文件名作参数或者有文件重定向到标准输入,他会读取和执行文件中的脚本。
python xxx.py --直接运行的方式启动(此时脚本__name__为"main")

如果用python -c command [arg] … 调用,则执行命令command。由于 Python 代码中经常会包含对终端来说比较特殊的字符,通常情况下都建议用英文单引号把 command 括起来。
这里的command是python 自己的command,不是linux的。

Python -m module [arg] …会执行module的源文件,这把python模块当作脚本使用。
python -m xxx.py --以模块的方式启动(此时脚本的__name__属性值依然不再是"main"而是"xxx")

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

1.2.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 中给命令或模块来处理。

cat module.py
#! /usr/bin/env python

-- coding: UTF-8 --

import sys

print(sys.path)
print(sys.modules)
print(sys.argv[0], sys.argv[1])

通过以上执行方式发现:
第一种方法——直接运行脚本,当前脚本所在的路径会加入到 sys.path 列表中,但是 sys.modules 字典中的 __main__的路径不是绝对路径,只是脚本名称。
第二种方法——当做模块方式运行,当前脚本所在的路径不会加入到 sys.path 列表中,但是 sys.modules 字典中的 main 的路径是绝对路径,同时,还引入了 runpy 和 pkgutil 两个模块。
runpy 的用途:定位并执行该模块。主要用途在于实现命令行 -m 执行 python 模块的效果。
pkgutil 的用途:获取包里面的所有模块列表。pkgutil.get_data() 可读取包内任何文件内容。

Python模块的导入机制:
要理解模块的导入机制,得理解几个关键的名词。sys.path -> sys.modules -> < module >.dict
sys.path:是一个列表。保存着模块的搜索路径。如果路径没有存在与该列表中,可使用 sys.path.append() 导入。
sys.modules: 是一个字典。所有加载到内存中的模块都存放在该字典中。当 import 一个模块的时候,首先会在这个字典中查找是否已经加载了目标模块。如果已加载,则将模块的名字加入到正在调用 import 的模块的 Local 命名空间(也就是< module >.dict)中。如果没有,则从 sys.path 查找,找到后载入内存,并加入到 sys.modules 字典,名称也将导入到当前模块的 Local 命名空间。

1.2.2 交互模式

在终端(tty)输入并执行指令时,解释器是运行在 交互模式(interactive mode)。在这种模式中,它会显示 主提示符(primary prompt),提示输入下一条指令,通常用三个大于号(>>>)表示;连续输入行的时候,它会显示 次要提示符,默认是三个点(…)。

1.2.3 解释器的运行环境(编码格式)

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

-- coding: encoding --

Encoding可以是python支持的任意一种codecs。
关于 第一行 规则的一种例外情况是,源码以 UNIX “shebang” 行 开头。这种情况下,编码声明就要写在文件的第二行。例如:
#!/usr/bin/env python3

-- coding: cp1252 --

你可能感兴趣的:(python,python3编程)