国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

詳解Python中的from..import絕對導入語句

2019-11-25 16:42:20
字體:
來源:轉載
供稿:網友

相對或者絕對import
更多的復雜部分已經從python2.5以來實現:導入一個模塊可以指定使用絕對或者包相對的導入。這個計劃將移動到使絕對的導入成為默認的細節在其他版本的python中。
我們假設你有一個包目錄,像下面這樣:

pkg/pkg/__init__.pypkg/main.pypkg/string.py

上面定義了一個包稱為 pkg 包含 pkg.main 和pkg.string 兩個子模塊。考慮在‘main.py'中的代碼,什么事情會發生如果我們執行語句 import string 在python2.4或者更早的版本?他將會查詢包的目錄執行一個相對的import,找到pkg/string.py ,導入文件的內容作為pkg.string模塊,這個模塊的邊界的名字是'string'在pkg.main模塊中的名稱空間。
如果pkg.string是你想要的這個非常不錯。但是如果你僅僅想要的是python的基本的string模塊?
沒有清楚的方法忽略pkg.string以及尋找基本的模塊;一般情況下你不得不去查看sys.modules中的內容,那有一點稍微的不清楚。Holger Krekel的py.std包提供了一個整齊的方法執行從基本庫中導入的方法,improt py;py.std.string.jion(),但是那個包在python的安裝過程是是不可用的。

閱讀代碼在相對導入方面也是不夠清晰的,因為讀者可能混淆string和pkg.string模塊使用。Python用戶可以馬上知道那是不同的名稱在基本庫和自己的包模塊之間,但是你不能保護你自己的子模塊名字在一個新版本的python中。

從python2.5,你可以打開 import的行為直接去絕對導入使用一個 from __future__ import absolute_import 。這個絕對導入行為將成為一個默認的細節在將來的python中。一旦絕對導入被默認,import string 將總是尋找基本庫。建議用戶盡可能多的使用絕對導入,因此在你的代碼中使用from pkg improt string是適宜的。在python2.*版本中需要:

from __future__ import absolute_import

示例1:
例如:在模塊A.B.C中的代碼:

from . import D     # 導入A.B.Dfrom .. import E    # 導入A.Efrom ..F import G    # 導入A.F.G,.. 和 F是連著的,中間沒有空格

.代表當前目錄,..代表上一層目錄,...代表上上層目錄。

示例2:

目錄結構:

package/ __init__.py subpackage1/  __init__.py  moduleX.py  moduleY.py subpackage2/  __init__.py  moduleZ.py moduleA.py

在subpackage1/moduleX.py 或者 subpackage1/__init__.py中可以這樣導入module:

from .moduleY import spamfrom .moduleY import spam as hamfrom . import moduleYfrom ..subpackage1 import moduleYfrom ..subpackage2.moduleZ import eggsfrom ..moduleA import foofrom ...package import barfrom ...sys import path

注意,from ...sys import path是合法的,但是不建議。直接from sys import path就行了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 涟源市| 南昌市| 平阴县| 光泽县| 澄迈县| 陵川县| 大厂| 隆林| 岚皋县| 昌江| 扶风县| 寻甸| 雅安市| 双峰县| 格尔木市| 叶城县| 旬阳县| 乌兰察布市| 延安市| 岑溪市| 衡阳县| 津市市| 丰宁| 天津市| 怀宁县| 老河口市| 华蓥市| 曲麻莱县| 云南省| 县级市| 黎平县| 米林县| 西林县| 诸暨市| 波密县| 临洮县| 南安市| 呼玛县| 镇江市| 南安市| 班玛县|