赞
踩
通常大家使用最多的是第一种,当然也有特殊情况下使用第二种和第三中的情况。
正常我们导入的模块都会存储在sys.modules中,当我们使用任意一种导入方式的时候,系统将自动在sys.modules中调用,如果没有将会在sys.paths中查找是否有对应的包。
import module
| from module import class,function,property
普通导入使用上述两种方式可以直接导入需要的包、方法、类变量等,使用范围一般为局部命名空间,且导入所返回的module地址为当前
导入文件的地址
```python # -*- coding:utf-8 -*- import sys import importlib def find_import_pkg(): find_import_modules = list(module_name for module_name in sys.modules.keys() if 'import_study' in module_name) print(find_import_modules) return find_import_modules def import_level_test(import_pkg): # find_import_pkg() exec("import %s" % import_pkg) print(eval(import_pkg)) # find_import_pkg() del sys.modules[eval("%s.__name__"%import_pkg)] importlib.reload(sys) return import_level_test # import xxx import_level_test('import_study') import_level_test('import_study.pkg_level01') import_level_test('import_study.pkg_level01.pkg_level02') import_level_test('import_study.pkg_level01.pkg_level02.pkg_level03') import_level_test('import_study.pkg_level01.pkg_level02.pkg_level03.py_level03') # from xxx import xxx from import_study.pkg_level01.pkg_level02.pkg_level03.py_level03 import py_level03_func01 ```
importlib.import_module(name,package)
importlib可以实现绝对路径
或者相对路径
的包导入,它是一个导入方法,支持自定义包路径导入,其中每一个点(.)代表一层包文件,第一个点表示当前包。且导入所返回的module地址为当前
导入文件的地址。
```python # -*- coding:utf-8 -*- # importlib.import_module 用法 import importlib # 绝对路径 print(importlib.import_module('import_study.pkg_level01')) print(importlib.import_module('import_study.pkg_level01.pkg_level02.pkg_level03')) print(importlib.import_module('import_study.pkg_level01.pkg_level02.pkg_level03.py_level03')) # 相对路径 代码里了一个点代表一个level层 print(importlib.import_module('.pkg_level01','import_study')) print(importlib.import_module('..pkg_level01','import_study.pkg_level01')) print(importlib.import_module('...pkg_level01','import_study.pkg_level01.pkg_level02')) print(importlib.import_module('....pkg_level01','import_study.pkg_level01.pkg_level02.pkg_level03')) print(importlib.import_module('.....pkg_level01','import_study.pkg_level01.pkg_level02.pkg_level03.py_level03')) # 相对路径 可以再subpkg内部使用相对导入 不用直接从工程顶层包import_study开始 这里模拟一层的情况 print(importlib.import_module('.pkg_level02','pkg_level01')) print(importlib.import_module('..pkg_level02','pkg_level01.pkg_level02')) ```
__import__(name, globals=None, locals=None, fromlist=[],level=0)
双下import是一个导入方法,常常用在导入后直接进行使用,并且不存储任何导入变量(可以理解用完即释放),导入返回的module地址为第一层
包的地址,而不是导入文件的精确地址。
```python # -*- coding:utf-8 -*- # __import__(name, globals=None, locals=None, fromlist=()), level=0) # name: module name # globals: 导入全局 # locals: 导入局部 # fromlist: 导入的pkg、py、class、function、property imported_pkg = __import__('import_study.pkg_level01', globals(), locals(), ['pkg_level02'], 0) print(imported_pkg.pkg_level02.pkg_level03.py_level03.py_level03_func01) imported_py = __import__('import_study.pkg_level01.pkg_level02.pkg_level03.py_level03', globals(), locals(), ['py_level03_func01'], 0) print(imported_py.py_level03_func01) print(__import__('import_study.pkg_level01')) print(__import__('import_study.pkg_level01.pkg_level02')) print(__import__('import_study.pkg_level01.pkg_level02.pkg_level03')) print(__import__('import_study.pkg_level01.pkg_level02.pkg_level03.py_level03')) ```
参考
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。