Python的import
1 | import my_module |
- 寻找my_module.py文件
- 将my_module.py文件执行后放进缓存中,形成一个命名空间,并在主程序中生成一个变量命名为my_module,指向该命名空间
- 然后就能通过命名空间的方式使用里面的变量、函数或者类


1 | from my_module import test1 |
- 运行my_module.py文件
- 从my_module.py文件里导入函数test1(),赋值给变量test1
- 但是my_module的命名空间并不会生成,也就没有my_module变量


1 | import package |
首先,package即包是一种特殊的模块,在进行导入时
- 搜索是否有__init__.py文件
- 如果有,将该文件运行后生成有关该文件的命名空间,然后以package命名一个module变量指向这个命名空间,这个命名空间中不会有任何该包下的模块信息,也就是module1和module2,如果涉及这两个,程序会报错,找不到这两个变量
- 如果没有,那就啥事没有



1 | import package.module1 |
- 运行__init__.py和该包下的module1.py文件后生成2个命名空间
- 由package做为主程序的变量指向__init__.py所生成的命名空间,而在init生成的命名空间中会多出一个module1变量,指向module1.py生成的命名空间


1 | from package import module1 |
- 运行init.py文件和module1.py文件,但是只生成一个由module1.py组成的命名空间
- 在主程序也只会有生成一个module1变量指向module1.py生成的命名空间
- 并不会有package变量的命名空间


1 | from package.module1 import test |
- 运行init.py和module1.py文件后不生成命名空间
- 将module1.py里的test()函数导入后生成test变量来指向这个函数

总结:导入包或者模块,执行文件后生成module变量指向命名空间
导入变量、函数、或者类执行文件后会直接生成对应的变量
关于as
1 | import module as m |
就是将导入的变量换个名称,比如将module变量改名为m,指向的对象还是一样的
不过
1 | import package.module1 as m |
会直接将m指向package.module1所指向的命名空间,并不会生成init.py的空间,也就不会有package变量
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 星の夜!