本文實例講述了Python動態導入模塊的方法。分享給大家供大家參考,具體如下:
一、正常導入模塊
正常模塊導入方式: import module(模塊路徑)
同時導入多個模塊:
1
|
import os,sys,socket |
二、動態導入模塊
動態導入模塊允許我們通過字符串形式來導入模塊
2.1 __import__函數,接受一個字符串參數
1
2
3
4
5
6
7
8
|
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__
函數來導入該模塊呢?
1
2
3
4
5
6
7
8
9
|
# 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 動態導入模塊列表
1
2
3
4
5
6
|
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
1
2
3
4
5
|
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
希望本文所述對大家Python程序設計有所幫助。
原文鏈接:http://www.cnblogs.com/bigberg/p/7746828.html