一、import导入的类型:
1、模块文件(.py、.pyo、.pyc、.pyd、.so、.dll)
2、包(包含多个模块)
3、内建模块(使用C编写并已链接到Python解释器中)
二、import导入的路径:
解释器按照sys.path列表中的目录顺序来查找导入文件
1.已导入模块的名称创建新的命名空间,通过该命名空间就可以访问导入模块的属性和方法。
2.在新创建的命名空间中执行源代码文件。
3.创建一个名为源代码文件的对象,该对象引用模块的名字空间,这样就可以通过这个对象访问模块中的函数及变量
四、import查看导入的包:
import package.api # 将模块package.api导入全局命名空间,例如访问api中属性时用package.api.execute
from package import api # 将模块api导入全局命名空间,例如访问api中属性时用api.execute
from package.api import execute # 将模块api的属性直接导入到命名空间中,例如访问api中属性时直接用execute
使用from语句可以把模块直接导入当前命名空间,from语句并不引用导入对象的命名空间,而是将被导入对象直接引入当前命名空间。
1、模块文件(.py、.pyo、.pyc、.pyd、.so、.dll)
2、包(包含多个模块)
3、内建模块(使用C编写并已链接到Python解释器中)
二、import导入的路径:
解释器按照sys.path列表中的目录顺序来查找导入文件
其中list第一个元素空字符串代表当前目录。
>>> import sys
>>> print sys.path
['', '/home/admin/anaconda2/lib/python27.zip', '/home/admin/anaconda2/lib/python2.7', '/home/admin/anaconda2/lib/python2.7/plat-linux2', '/home/admin/anaconda2/lib/python2.7/lib-tk', '/home/admin/anaconda2/lib/python2.7/lib-old', '/home/admin/anaconda2/lib/python2.7/lib-dynload', '/home/admin/anaconda2/lib/python2.7/site-packages', '/home/admin/anaconda2/lib/python2.7/site-packages/Sphinx-1.4.6-py2.7.egg', '/home/admin/anaconda2/lib/python2.7/site-packages/setuptools-27.2.0-py2.7.egg']
三、import工作流程:1.已导入模块的名称创建新的命名空间,通过该命名空间就可以访问导入模块的属性和方法。
2.在新创建的命名空间中执行源代码文件。
3.创建一个名为源代码文件的对象,该对象引用模块的名字空间,这样就可以通过这个对象访问模块中的函数及变量
四、import查看导入的包:
sys.modules字典中保存着所有被导入模块的模块名到模块对象的映射。
>>> print sys.modules
{'copy_reg': <module 'copy_reg' from '/home/admin/anaconda2/lib/python2.7/copy_reg.pyc'>, 'sre_compile': <module 'sre_compile' from '/home/admin/anaconda2/lib/python2.7/sre_compile.pyc'>, '_sre': <module '_sre' (built-in)>, 'encodings': <module 'encodings' from '/home/admin/anaconda2/lib/python2.7/encodings/__init__.pyc'>}
五、import导入的命名空间:
import package.api # 将模块package.api导入全局命名空间,例如访问api中属性时用package.api.execute
from package import api # 将模块api导入全局命名空间,例如访问api中属性时用api.execute
from package.api import execute # 将模块api的属性直接导入到命名空间中,例如访问api中属性时直接用execute
使用from语句可以把模块直接导入当前命名空间,from语句并不引用导入对象的命名空间,而是将被导入对象直接引入当前命名空间。