__import__和import的使用及區別
阿新 • • 發佈:2021-01-03
一般很少用到__import__
,這個一般我們動態載入某些模組變數或者庫的時候會用到。
直接那例子說話吧,我們看一下目錄結構:
我們根目錄下的一個資料夾下有一個qemu_hzw4的一個資料夾,這個iplist.py檔案中存放了一個iplist列表。
我們的任務就是讀取裡面的列表。
可以使用如下方式
env = "qemu_hzw4"
a = __import__(env,globals(), locals(), ["iplist"], -1)
print a
for i in a.iplist.iplist:
print i
我們看一下執行結果:
<module 'qemu_hzw4' from '/Users/bytedance/git/qemu_hzw4/__init__.pyc'>
192.168.111.7
192.168.111.8
192.168.112.1
192.168.112.2
Process finished with exit code 0
我們可以看到print a 出的結果是,我們呼叫了module ‘qemu_hzw4’
`(env,globals(), locals(), [“iplist”], -1)``引數含義如下:
import(name, globals, locals, fromlist, level)只有name是必選引數,其他都是可選引數,一般情況下直接使用name引數即可。
fromlist指明需要匯入的子模組名,level指定匯入方式(相對匯入或者絕對匯入, 預設兩者都支援)。
當模組名為package.module時,而且fromlist引數為空時,函式返回頂層的模組,也就是package模組。如果fromlist=[module],則返回module。
參考連結
也就是,匯入資料夾下的哪一個py檔案需要註明一下,否則會報錯。
或者,感覺那麼多引數很麻煩的話,也可以這樣使用:
也就是直接在模組的後面加入要匯入的檔名
env = "qemu_hzw4.iplist"
a = __import__(env).iplist
print a
for i in a.iplist:
print i
最後,如上程式也 可以直接使用import的方式表達:
from qemu_hzw4 import iplist
for i in iplist.iplist:
print i