##2. 包 包是用来组织模块文件的,一个包中含有若干模块文件(“.py”文件)和一个“init .py”文件 (在python3中,即使包下没有__init__.py文件,import 包仍然不会报错,而在python2中,包下一定要有该文件,否则import 包报错)
创建包的目的不是为了运行,而是为了导入使用,或者说将相同功能的模块文件组织在一起。
###2.1 包的目录结构
|---包
|---|--- __init__.py 包的标志文件
|---|--- 模块1
|---|--- 模块2
|---|--- 子包(子文件夹)
|---|---|--- __init__.py 包的标志文件
|---|---|--- 子包模块1
|---|---|--- 子包模块2
###2.2 包的导入和使用 包的导入和使用有以下几种情况:
#1. 直接导入一个包,可以使用init.py中的内容
import package_name
#使用方式:
package_name.func_name
package_name.class_name.func_name()
#2. 为包添加别名
import package_name as p
#在使用上同1类似,需要添加前缀
#3. 导入包中某一个具体的模块
import package.module
#使用方式:
package.module.func_name
package.module.class.fun()
package.module.class.var #引用类中的变量
#4. 导入包中的模块并添加别名
import package.module as pm
#5. from … import 导入,此种导入方法不执行__init__的内容
from package import module1, module2, module3, …
from package import *
from package.module import *
<font color='red'>Tips:</font>
-
需要注意的是from后import导入的模块,必须是明确的一个不能带点,否则会有语法错误,如:from a import b.c是错误语法。(应写为from a.b import c)
-
绝对导入和相对导入
绝对导入是从package_name.开始进行文件的导入
而相对导入是由“.”或“..”开始,主要为了满足在一个包内的相互引用的需求(只能在一个包中使用,不能跨到其他包的目录下)
#例如,想在package01/sub1/a.py中导入package01/sub2/b.py #绝对导入: from package01.sub2 import b #相对导入: from ..sub2 import b
###2.3 init.py文件 一个目录下如果包含 init.py ,则被 Python 视作一个 Python package。
通常__init__.py 文件为空,但是我们还可以为它增加其他的功能。我们在导入一个包时,实际上是导入了它的__init__.py文件。这样我们可以在__init__.py文件中批量导入我们所需要的模块,而不再需要一个一个的导入。
# package01
# __init__.py
import os
import re
import urllib
import sys
import os
# a.py
import package01
#package01中的__init__.py已经导入了需要的外部模块,因此在a模块中可以省略
print(package.re, package.urllib, package.sys, package.os)
<font color='red'>注意这里访问__init__.py文件中的引用文件,需要加上包名。</font>
参考链接:
来源:oschina
链接:https://my.oschina.net/u/4359488/blog/3785971