import 模块 from 包 import 模块
上面的代码有什么区别呢?
from 模块 import * 这种导入相当与把模块里面的代码都复制到当前模块中(也就是该语句所在位置),这时候你可以直接使用这个模块里面的变量名称和方法等。
所以这种方式如果变量和方法和当前模块有重名则会不生效。
import 模块 这种导入如果你使用里面的变量或方法,必须加上模块名称前缀。import 的本质是把模块提前解释一遍然后赋值给一个与模块同名
的变量,所以这也就是为什么你使用里面的模块或变量要加模块名的原因。
【包】之所以能导入就是因为它里面有一个__init__.py文件,所以导入包的过程就是解释这个文件的过程。不过在执行这个文件之前它首先要进行搜索也就是
找到这个包在哪里?就去sys.path这个里面定义的搜索路径查找。这里首先包含当前路面、项目的sources roots目录和其他系统内置的路径。所以sys.path
就是这个列表,如果有时候找不到你导入的包,你就可以把包路径添加到这个sys.path列表中。sys.path列表中的第一个元素始终是当前路径。
虽然导入包和导入模块都是 import 语句但是其背后的逻辑不通,导入包是执行包下面的__init__.py,但是导入模块是把模块的内容复制给同名模块名称也就
变成了一个变量。
看下面的例子