本文實例講述了Python動態(tài)導(dǎo)入模塊的方法。分享給大家供大家參考,具體如下:
一、正常導(dǎo)入模塊
正常模塊導(dǎo)入方式: import module(模塊路徑)
同時導(dǎo)入多個模塊:
1
|
import os,sys,socket |
二、動態(tài)導(dǎo)入模塊
動態(tài)導(dǎo)入模塊允許我們通過字符串形式來導(dǎo)入模塊
2.1 __import__函數(shù),接受一個字符串參數(shù)
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 模塊名當(dāng)中參數(shù)傳入__import__
函數(shù)中,可以看出my_sys 和my_os 其實就是相當(dāng)于 os , sys 模塊了。
2.2 __import__函數(shù)導(dǎo)入自己的模塊
我們在lib包中有一個test.py模塊,我們?nèi)绾瓮ㄟ^__import__
函數(shù)來導(dǎo)入該模塊呢?
1
2
3
4
5
6
7
8
9
|
# test.py內(nèi)容 class Person( object ): def __init__( self ): self .name = 'bigberg' # 導(dǎo)入模塊 mod = __import__ ( 'lib.test' ) # 相當(dāng)于獲取了 lib 的路徑 print (mod) obj = mod.test.Person() print (obj.name) |
輸出:
<module 'lib' from 'G:\\python\\untitled\\study8\\lib\\__init__.py'>
bigberg
2.3 動態(tài)導(dǎo)入模塊列表
1
2
3
4
5
6
|
moduleNames = [ 'sys' , 'os' , 'socket' ] print ( type ( map )) # 在python3 map函數(shù)不在是內(nèi)置函數(shù),而是class,返回的結(jié)果是 可迭代對象 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)]
現(xiàn)在的modules[0] 就相當(dāng)于 sys 模塊了。
2.4 importlib 模塊
動態(tài)導(dǎo)入模塊時,python官方建議使用importlib
模塊,我們同樣導(dǎo)入lib/test.py
1
2
3
4
5
|
import importlib mod = importlib.import_module( 'lib.test' ) # mod相當(dāng)于 test.py本身了,于上例不同 print (mod) obj = mod.Person() print (obj.name) |
輸出:
<module 'lib.test' from 'G:\\python\\untitled\\study8\\lib\\test.py'>
bigberg
希望本文所述對大家Python程序設(shè)計有所幫助。
原文鏈接:http://www.cnblogs.com/bigberg/p/7746828.html