91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

為什么Python的__import__需要fromlist

發布時間:2021-10-19 09:35:05 來源:億速云 閱讀:314 作者:柒染 欄目:大數據

為什么Python的__import__需要fromlist,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

在Python中,如果要以動態方式導入模塊,可以執行以下操作:

module = __import__('module_name')
 

如果要導入子模塊,你可能認為這只是一個簡單的問題:

module = __import__('module_name.submodule')
 

結果呢,當然不起作用了,你必須這么做:

module = __import__('module_name.submodule', fromlist=['xxx'])
 

為什么?實際值fromlist似乎根本不重要,只要它不是空的就行。

實際上,__import__內部也是import來實現的。
那么我們在使用import的時候,一般有以下五種方式:

import pkg
import pkg.mod
from pkg import mod, mod2
from pkg.mod import func, func2
from pkg.mod import submod
 

在前兩種情況下,import語句將最左側模塊對象分配給了: pkg。之后的import pkg.mod可以這樣使用pkg.mod.func(),因為import語句引入了本地的模塊pkg,這是一個具有mod屬性的模塊對象。因此__import__函數必須返回最左側的模塊對象,以便將其分配給pkg。這兩種情況相當于

pkg = __import__('pkg')
pkg = __import__('pkg.mod')
 

后面三種情況,import就必須做更多的工作了,它必須從模塊對象獲取并分配多個名稱。但是__import__函數只能返回一個對象,并且它不能從模塊對象中檢索出多個名字,所以對于第三種情況就是:

pkg = __import__('pkg')
mod = pkg.mod
mod2 = pkg.mod2
 

但是如果mod和mod2在該模塊pkg中尚未導入,那將無法生效。__import__函數需要知道mod和mod2是它可以訪問的名稱,以便它可以查看他們是否是模塊并且嘗試導入他們。所以像一下這個方式更為接近:

pkg = __import__('pkg', fromlist=['mod', 'mod2'])
mod = pkg.mod
mod2 = pkg.mod2
 

這會導致__import__先嘗試pkg.mod和pkg.mod2,如果不生效的話,它并不會拋出異常。但是第五種例子按照以上方式依然不行:

tmp = __import__('pkg.mod', fromlist=['submod'])
submod = tmp.submod
 

我們希望tmp是pkg.mod模塊,但實際上它還是pkg模塊。如果是按照我們想的這種方式去加載,那就要增加更多額外的解包工作。所以它就直接返回了最右邊的模塊,當且僅當fromlist里面不是空的時候

__import__函數中的fromlist實際上是沒有具體含義的,你可以理解為它只是一種標記,當它不為空的時候,import將為我們導入前面所寫的字符串中最右邊的模塊。當它為空的時候,import將為我們導入字符串最左邊的模塊,僅此而已。

關于為什么Python的__import__需要fromlist問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿拉善右旗| 牡丹江市| 富民县| 静乐县| 手游| 大兴区| 威海市| 常熟市| 胶州市| 甘德县| 南靖县| 阿尔山市| 洪湖市| 哈尔滨市| 谷城县| 遵义县| 宁晋县| 宿松县| 山阳县| 保定市| 汾西县| 西吉县| 西乌珠穆沁旗| 农安县| 金溪县| 个旧市| 中卫市| 察隅县| 楚雄市| 招远市| 彰化市| 隆昌县| 紫金县| 舒城县| 营口市| 双鸭山市| 普兰县| 荥阳市| 清涧县| 兴安盟| 峨眉山市|