动态模块导入

动态模块导入


####**动态导入模块**

方法一:
  _import_
  1. 函数功能用于动态的导入模块,主要用于反射或者延迟加载模块。
  2. _import_(module)相当于import module

方法二:
  import importlib 这是官方建议的用法
  importlib.import_module(module)


举例说明:
目录结构

#aa.py:
class Foo(object):
    def say_hi(self):
        print('hello world')

#方法一:
impstring =  __import__('import_lib.aa')  #解释器自己内部调用
a = impstring.aa.Foo()
a.say_hi()
print(impstring.aa.__module__)
---------------------------------------
>>>:hello world
>>>:import_lib.aa

#方法二:
import importlib
strmodle = importlib.import_module('import_lib.aa')
a =  strmodle.Foo()
a.say_hi()
print(strmodle.Foo.__module__)
---------------------------------------
>>>:hello world
>>>:import_lib.aa

  有的时候,两个不同的模块提供了相同的功能,比如 StringIO 和 cStringIO 都提供了StringIO这个功能。

  这是因为Python是动态语言,解释执行,因此Python代码运行速度慢。

  如果要提高Python代码的运行速度,最简单的方法是把某些关键函数用 C 语言重写,这样就能大大提高执行速度。

  同样的功能,StringIO 是纯Python代码编写的,而 cStringIO 部分函数是 C 写的,因此 cStringIO 运行速度更快。

  利用ImportError错误,我们经常在Python中动态导入模块:

#importlib部分源码
import _imp  # Just the builtin component, NOT the full Python module
import sys
try:
    import _frozen_importlib as _bootstrap
except ImportError:
    from . import _bootstrap
    _bootstrap._setup(sys, _imp)
posted @ 2017-08-24 15:45  在下不想说  阅读(199)  评论(0编辑  收藏  举报