zoukankan      html  css  js  c++  java
  • 动态导入模块

    一、正常导入模块

      正常模块导入方式: 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
    

      

  • 相关阅读:
    ThinkPHP 3.2.2 实现持久登录 ( 记住我 )
    Java实现 LeetCode 20 有效的括号
    Java实现 LeetCode 20 有效的括号
    Java实现 LeetCode 19删除链表的倒数第N个节点
    Java实现 LeetCode 19删除链表的倒数第N个节点
    Java实现 LeetCode 19删除链表的倒数第N个节点
    Java实现 LeetCode 18 四数之和
    Java实现 LeetCode 18 四数之和
    Java实现 LeetCode 18 四数之和
    Java实现 LeetCode 17 电话号码的字母组合
  • 原文地址:https://www.cnblogs.com/bigberg/p/7746828.html
Copyright © 2011-2022 走看看