python3 中的import 和from import 使用区别(包和模块)
1.知识点
1)什么是包、什么是模块
2)import 、from import 如何使用
3)import 和 from import 使用区别
2.实现
以如下目录结构为例说明:
funtion.py
sound/ 顶层包
__init__.py 初始化 sound 包
formats/ 文件格式转换子包
__init__.py 这是一个空文件,有__init__.py文件,目录才会被视为一个包
wavread.py
wavwrite.py
aiffread.py
aiffwrite.py
auread.py
auwrite.py
...
effects/ 声音效果子包
__init__.py
echo.py
surround.py
reverse.py
...
filters/ filters 子包
__init__.py
equalizer.py
vocoder.py
karaoke.py
...
1)什么是包,什么是模块
- 模块:.py文件就是一个模块,python中所说的模块都是指某个.py文件,模块中包含函数、类或者变量。
- 包:当一个文件夹中含有__init__.py的文件,则这个文件夹会被视为一个包,包中可含有若干模块。
2)import 、from import 如何使用
以导入echo模块为例:
-
使用 import
# 导入上述目录结构中的echo.py模块 import sound.effects.echo # 使用echo 模块中的方法echofilter(必须使用目录全名去访问) sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)
-
使用 from import
# 导入上述目录结构中的echo.py模块 from sound.effects import echo # 使用echo 模块中的方法echofilter echo.echofilter(input, output, delay=0.7, atten=4) ####### 或者可使用from import直接导入函数或者变量 如下: # 导入上述目录结构中的echo.py模块 from sound.effects.echo import echofilter # 使用echo 模块中的方法echofilter echofilter(input, output, delay=0.7, atten=4)
以导入funtion模块为例:
-
使用 import
# 导入上述目录结构中的funtion.py模块 import funtion # 使用 funtion 模块中的方法echofilter(必须使用模块名加函数名访问) funtion.echofilter(input, output, delay=0.7, atten=4)
-
使用 from import
# 导入上述目录结构中的funtion.py模块 from funtion import echofilter # 直接使用 funtion 模块中的方法echofilter echofilter(input, output, delay=0.7, atten=4)
3)import 和 from import 使用区别
-
import:使用import时,import后除了最后一项,都必须是包,而最后一项则可以是模块或者是包,但是不可以是类,函数或者变量的名字
-
from import:使用from import时,from 后可跟包、模块、import后既可以是包里面的子包或者子模块,也可以是上一级子模块中的函数、类或者变量。import 语法会首先把 item 当作一个包定义的名称,如果没找到,再试图按照一个模块去导入。如果还没找到,抛出一个 :exc:ImportError 异常