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
    

      

  • 相关阅读:
    (基本知识)Redis 字符串(String)相关函数
    (基本知识)Redis 键相关命令函数
    (基本知识)Redis连接与安全
    centos7 php开发环境安装-Redis
    centos7 php开发环境安装--配置SSL(Apache为例)
    centos7 php开发环境安装-Git
    centos7 php开发环境安装-Nginx
    串口发送数据
    七大查找算法
    基于STM32原子战舰板内存管理源码详解
  • 原文地址:https://www.cnblogs.com/bigberg/p/7746828.html
Copyright © 2011-2022 走看看