之前接触过一些python的基础,由于在写Python程序,学习Python程序架构和文件管理方面的知识。
21 宏伟蓝图
模块是最高级别的程序组织单元,讲程序代码和数据封装起来以便重用。(从实际的角度来看,模块往往对应于Python程序文件)每一个文件都是一个模块,并且模块导入其他模块之后就可以使用导入模块定义的变量名。
import x
from x import y
imp.reload x
在一个模块文件的顶层定义的所有的变量名都成了被导入的模块对象的属性,导入给予了对模块的全局作用域中的变量的读取权,模块文件的全局作用域变成了模块对象的命名空间。
Python程序的通用架构
一般的Python程序都会采用多文件系统的形式,通用的程序架构是:将一个程序分割为源代码文件的集合以及将这些部分连接在一起的方法。
如何组织一个程序
一个Python程序包括了多个文本文件(Python语句的),是作为一个主体的、顶层的文件来构造的,被包括的文件被称作模块。
这个Python程序包含了程序的主要控制流程(需要运行来启动的文件),使用在模块文件中定义的工具(这些模块也可能用了别的模块)。
一个文件导入了一个模块来获得这个模块定义的工具的访问权,这些工具被认做是这个模块的属性。
导入和属性
b.py
def spam(text):
print(text,'spam')
a.py
import b
b.spam('gumby')
# print
>>> gumby spam
import如何工作
python中程序第一次导入文件(模块)时,会执行三个步骤:
1. 找到模块文件
2. 编译成位码(需要时)
3. 执行模块的代码来创建其所定义的对象
3 执行模块的代码
文件中的所有语句会一次执行,从头至尾,因此hi生成模块代码所定义的所有工具。
22 模块代码编写基础
模块创建
定义模块,只需要使用文本编辑器,把一些Python代码输入其中,以.py为后缀进行保存即可。
# module1.py
def printer(x): # Module attribute
print(x)
模块的使用
import会读取整个模块,from将获取(复制)模块特定的变量名。
import语句
>>>import module # Get module as a whole
>>>module.printer('Hello world!') # Qualify to get names
Hello world!
from语句
>>>from module import printer # Copy out one variable
>>>printer('Hello world!') # No need to qualify name
Hello world!
import 和 from的对等性
from module import name1,name2
#
import module
name1 = module.name1
name2 = module.name2
del module
from的第一步骤也是普通的导入操作,总是会把整个模块导入到内存中,无论是从这个文件中复制出多少变量名,只加载模块文件的一部分是不可能的(不会存在效率问题,字节码不是机械码)