1. 包
包就是一个文件夹. py2中包内必须要有一个__init__.py文件, 在python3中可以省略,但是最好都保留.
__init__.py 当我们导入一个包的时候,默认执行这个包内的__init__.py
if 条件:
语句块
一条语句 > 语句块 > 代码块(函数,类) > py文件(模块) > 包
注意: 使用 from xxx import xxx 这种形式, import 后面不可以出现"点"
导入包的执行过程:
1. 判断该文件夹是否已经被导入。
2. 如果没有被导入。开辟内存
3. 在该内存中运行包的__init__.py文件。
4. 给这个内存设置一个名字(包名)
2. 相对导入和绝对导入
相对导入: 相对于当前模块所在的包. 大坑: 使用的时候必须在包外面启动
from . import xxx 当前文件夹引入模块
from .. import xxx 引入上一层文件夹的模块
# 注意: Python不允许你运行的程序导包的时候超过当前包的范围(相对路径)
绝对导入: 根据包的根目录去导入内容
全部都依赖于 sys.path
添加路径方式: sys.path.append('添加的路径')
3. 使用包要注意的东西
尽量在包的外面启动程序.
#创建一些包
import os
os.makedirs('glance/api')
os.makedirs('glance/cmd')
os.makedirs('glance/db')
l = []
l.append(open('glance/__init__.py','w'))
l.append(open('glance/api/__init__.py','w'))
l.append(open('glance/api/policy.py','w'))
l.append(open('glance/api/versions.py','w'))
l.append(open('glance/cmd/__init__.py','w'))
l.append(open('glance/cmd/manage.py','w'))
l.append(open('glance/db/__init__.py','w'))
l.append(open('glance/db/models.py','w'))
map(lambda f:f.close() ,l) # 一次性全部关闭文件句柄