• 动态导入模块


    一、正常导入模块

      正常模块导入方式: import module(模块路径)

      同时导入多个模块: 

    import os,sys,socket
    

    二、动态导入模块

      动态导入模块允许我们通过字符串形式来导入模块

      2.1 __import__函数,接受一个字符串参数

    import os, sys
    
    my_sys = __import__('sys')
    my_os = __import__('os')
    
    print(sys.version)
    print(my_sys.version)
    
    print('-------------')
    print(os.getcwd())
    print(my_os.getcwd())
    
    
    # 输出
    
    3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)]
    3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)]
    -------------
    G:pythonuntitledstudy8
    G:pythonuntitledstudy8
    

      我们将sys, os 模块名当中参数传入__import__函数中,可以看出my_sys 和my_os 其实就是相当于 os , sys 模块了。

      2.2 __import__函数导入自己的模块

      我们在lib包中有一个test.py模块,我们如何通过__import__函数来导入该模块呢?  

    # test.py内容
    
    class Person(object):
    
        def __init__(self):
            self.name = 'bigberg' 
    # 导入模块
    
    mod = __import__('lib.test') # 相当于获取了 lib 的路径
    print(mod)
    obj = mod.test.Person()
    print(obj.name)
    
    
    # 输出
    
    <module 'lib' from 'G:\python\untitled\study8\lib\__init__.py'>
    bigberg
    

      2.3 动态导入模块列表  

    moduleNames = ['sys', 'os', 'socket']
    print(type(map))
    # 在python3 map函数不在是内置函数,而是class,返回的结果是 可迭代对象
    print(isinstance(map(__import__, moduleNames), Iterator))
    
    modules = list(map(__import__, moduleNames))
    
    print(modules[0].version)
    
    # 输出
    
    <class 'type'>
    True
    3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)]
    

      现在的modules[0] 就相当于 sys 模块了。

      2.4 importlib 模块

      动态导入模块时,python官方建议使用importlib模块,我们同样导入lib/test.py 

    import importlib
    
    mod = importlib.import_module('lib.test')  # mod相当于 test.py本身了,于上例不同
    print(mod)
    
    obj = mod.Person()
    print(obj.name)
    
    # 输出
    
    <module 'lib.test' from 'G:\python\untitled\study8\lib\test.py'>
    bigberg
    

      

  • 相关阅读:
    Microsoft Enterprise Library
    TCP拥塞控制算法内核实现剖析(三)
    Linux内核链表实现剖析
    sk_buff 剖析
    TCP拥塞控制算法内核实现剖析(一)
    set time zone Ubuntu
    xml listview
    VSTO rtm assembly
    Assembly and ActiveX
    input a long sentence in a single line of textbox
  • 原文地址:https://www.cnblogs.com/bigberg/p/7746828.html
Copyright © 2020-2023  润新知