import ... # import the module by its name
from ... # from a module, import something more detail
reload ... # restarts the name of the module
使用 module 的原因
一个 file 里面的全部变量,命名空间,都可以被 imported 到一个新的 .py file。最后,让多个 module 同时可以被连接到一个更大的 program 里面。
模块至少有三个角色:代码重用,系统命名空间的划分,数据共享
- 模块可以在文件中永久保存代码,只要 import 指令还在,下次再开启的时候模块之间就会自动连接并调用功能。模块也是定义变量名的命名空间(最大的空间)。
- 模块是 python 中最高级别的程序组织单元。是个有效避免变量名冲突的工具。
- 不论引用或是拷贝,从操作的角度来看,模块跨系统之间的功能共享都是很方便的,也可以被多个客户端导入。
Python 程序架构
通常一个程序要完成一件事,都不是一个文件写到底的方式,也全部代码都塞在同一个文件档案里面,而是分而立之:架构把一个程序分割为源代码文件的集合,还有把这些部分连接在一起的方法。当一个模块被 import 语句引用的时候,实际效果就是把模块名赋值给再如的模块对象,如举例:
>>> # file number one
>>> def spam(text):
print(text, 'spam')
>>> # file number two
>>> import number_one
>>> number_one.spam('gumby')
程序作为一个主体,是由顶层的文件来构造的,可能配合有 0 个或是多个支持的文件。
顶层文件:运行来启动模块的主要文件,包含了主要的控制流程
模块文件:工具的库,用来搜集顶层文件使用的组件
标准库模块:python 内建的文件库,大约有200个模块,包含各式各样的功能,全部都是 import 的方式来实现。
The steps: find the file >>> compile the code >>> execute the content
一旦 import 引用了模块,python 就会开始查找电脑里面的模块位置,一般有一个 default 位置,就是 python 安装文件下的 lib 文件夹。以下是查找顺序:
- 程序主目录
包含程序顶层文件的那个资料夹,或是交互模式应用程式所在的那个资料夹 - pythonpath 目录
这个目录可以让我们定制化的添加,从浅到深搜索 pythonpath 设置的所有目录,这个功能在文件调用的时候跨目录的情况下格外重要,如果今天两个一摸一样的模块被呼叫,最后引用的该模块就是放在比较浅层,最先被找到的那一个 - 标准链接库目录
This is where the standard intrinsic models of python located. - 任何 .pth 文件的内容
我们也可以创造一个文件附档名为 .pth 去从该档案内容指定路径
sys.pth 里面就是一系列的内置模块引用路径,一旦 python 被运行,pythonpath 和 .pth 里面的文件内容会都被包含进 sys.pth 路径列表 list 里面逐行被执行,故我们可以顺利 import 一个模块。
Compiling
python 会把代码编译成为“字节码”,这个过程是耗时间的环节,为了增加速度,如果我们了解其中转换的肌理,可以直接用字节码去引用模块达到更高的效率。
Executing
变量名赋值 -> 产生模块文件属性 -> 函数赋值 -> 得以调用
Import includes many operations: searching files, compiling codes, and executing files. If we want to reload the module which has been imported previously, there is also a function that can help: reload! reload is also an intrinsic sentense that is easy to be applied to our code.