一、正常導入模塊
正常模塊導入方式: 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:\python\untitled\study8 G:\python\untitled\study8
我們將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