如果直接 import 包名 ,我们是无法通过 包名,模块名,函数名() 来调用包里面的函数的。 例如下面:
解决方案: 利用__init__.py文件进行初始化,导入这个包下的所有模块
import test_package
导入包会自动执行包中的__init__.py文件。在这个文件中我们可以做一些初始化工作。一般情况下我们既然会导入这个包,证明我们需要用到这个包下的多个甚至所有模块,所以我们所说的一些初始化工作就是在__init__.py文件中导入这个包下的所有模块:
from . import 模块1
from . import 模块2
......
而当我们调用的时候需要这样:
包名.模块名.函数名() # test_package.test_module.test()
一级目录:
'''test.py'''
import mglearn
mglearn.datasets.make_wave(n_samples=40)
运行结果:
二级目录:
'''__init__.py'''
from . import plots
'''plots.py'''
from .plot_linear_regression import plot_linear_regression_wave
'''plot_linear_regression.py'''
from .datasets import make_wave
def plot_linear_regression_wave():
pass
'''datasets.py'''
def make_wave(n_samples=100):
print('hello 111111')
分析:一开始是不能直接执行 mglearn.datasets.make_wave(n_samples=40) 这行调用的。但是,我们在__init__.py文件中导入这个包下的所有模块。
注意:这时的模块导入像遍历一样,一层一层的下去,全都导入了进来: (1)__init__.py 导入了 plots.py (2)plots.py 导入了 plot_linear_regression.py (3)plot_linear_regression.py 导入了 datasets.py (4)直接通过mglearn.datasets.make_wave(n_samples=40) ,即包名.模块名.函数名() ,调用了 datasets.py里面的make_wave()函数
|