1. 程式人生 > 其它 >__import__和import的使用及區別

__import__和import的使用及區別

技術標籤:Pythonpython

一般很少用到__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