動態匯入模組

2022-07-04 05:03:11 字數 1753 閱讀 4932

正常模組匯入方式: import module(模組路徑)

同時匯入多個模組: 

import os,sys,socket

動態匯入模組允許我們通過字串形式來匯入模組

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:\python\untitled\study8

g:\python\untitled\study8

我們將sys, os 模組名當中引數傳入__import__函式中,可以看出my_sys 和my_os 其實就是相當於 os , sys 模組了。

我們在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)

# 輸出

bigberg

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)

# 輸出

true

3.5.2 (v3.5.2:4def2a2901a5, jun 25 2016, 22:18:55) [msc v.1900 64 bit (amd64)]

現在的modules[0] 就相當於 sys 模組了。

動態匯入模組時,python官方建議使用importlib模組,我們同樣匯入lib/test.py 

import importlib

mod = importlib.import_module('lib.test') # mod相當於 test.py本身了,於上例不同

print(mod)

obj = mod.person()

print(obj.name)

# 輸出

bigberg

Python動態匯入模組

如果匯入的模組不存在,python直譯器會報 importerror 錯誤 import something traceback most recent call last file line 1,in importerror no module named something 有的時候,兩個不同的...

動態匯入模組 import

mo1 import des mo2 import child.child mo3 import child print mo1,mo2,mo3 mo3與mo2相同 同級目錄使用模組物件來呼叫 mo1.b mo1.fun2 對於目錄下的,動態匯入只會匯入第一級目錄 mo2.child.a 雖然沒有具...

python基礎 動態匯入模組

動態匯入模組方法1 import 說明 1.函式功能用於動態的匯入模組,主要用於反射或者延遲載入模組。2.import module 相當於import module 舉例說明 首先建立乙個模組目錄lib,然後在目錄內建立乙個模組為 aa.py os.path lib aa.py 模組 為 clas...