1樓:王澤民
import 有多種形式:
import A.B
from A import B
from A import B as C
其實所做的事情都是 import X.Y.Z 形式
不同寫法只不過最後是把module 或者module中的哪些物件以什麼樣的符號加入區域性命名空間,
載入過程是一樣的
過程主要分為三個步驟。
1.解析搜尋module 路徑
2.module pool(sys.modules)維護
已經存在的module
非內建的module(載入過一次後)
內建module(一開始就載入進來)
對不同格式module 動態載入 (py,pyc,pyd)
3.符號匯入涉及python 虛擬機器執行,留坑等我了解完python 虛擬機器之後再補充。
過程不複雜,就是讀取module 所有物件,建立乙個dict
然後更新區域性命名空間。
import 都是在乙個package 環境下操作的
沿著 __main__.x.y.z 所示的樹狀結構路徑去載入
乙個資料夾有__init__.py 就可以被識別成package
在__init__.py 中可以import, 和在資料夾內的其它py檔案中import 的差別是package環境不同
沿著路徑載入package或module,載入完都是乙個module物件,不過package 有path屬性,module 沒有。
module 應該在package 或者python的標準搜尋路徑中。import不能跨package
就算是巢狀import ,在當前module import 只影響到module 自身命名空間,不會影響到上一層。
無論何時何地import 都會影響到到全域性module pool
2樓:李巨集杰
1. 定位模組檔案, 按照以下順序檢索:
程式主目錄
PYTHONPATH 目錄
標準鏈結庫目錄
任何.pth 檔案內容
通過sys.path可以檢視上述目錄的匯入順序:
In [1]: import sys
In [2]: sys.path
Out[2]:
['',
'/home/lihongjie/anaconda3/bin',
'/home/lihongjie/anaconda3/lib/python36.zip',
'/home/lihongjie/anaconda3/lib/python3.6',
'/home/lihongjie/anaconda3/lib/python3.6/lib-dynload',
'/home/lihongjie/anaconda3/lib/python3.6/site-packages',
'/home/lihongjie/anaconda3/lib/python3.6/site-packages/Sphinx-1.5.1-py3.6.egg',
'/home/lihongjie/anaconda3/lib/python3.6/site-packages/setuptools-27.2.0-py3.6.egg',
'/home/lihongjie/anaconda3/lib/python3.6/site-packages/IPython/extensions',
'/home/lihongjie/.ipython']
2. 將匯入的模組編譯成位元組碼, 也就是我們通常看到的.pyc檔案
3. 執行編譯好的位元組碼, 返回乙個模組物件, 模組中的所有全域性變數都變成該物件的屬性. 這也就是我們可以在匯入模組之後可以使用
module.attr
來獲取模組中的物件.
3樓:
PEP 328 -- Imports: Multi-Line and Absolute/Relative
簡單來說,就是先從 sys.modules 裡面找一遍,找不到再去找 pkg 之類的。 建議仔細看看pep
Python 中如何同時 import 乙個包的兩個版本?
意群 續樓上,假設當前目錄為 zhangbin from a import c as a cfrom b import c as b c然後分別呼叫 a c.hello b c.hello IAMSK 比如 Users zhangbin a 和 Users zhangbin b 下各有乙個 lib ...
Python 如何啟動其他程式
如果有100個航母戰鬥群,你我連在知乎回覆答案的時間都沒有,都要去非洲挖煤賺錢養航母了 你對軍費毫無概念啊。不過無所謂了 二戰時美國有過147艘航艦,英國有過96艘航艦,其中艦隊級航艦,相對於所處時代來說,都比現在的001 002要強。就這艦船和艦載機的水平造100艘,也不過讓F35機隊多出動幾個來...
Python在科學計算 資料分析已經把其他語言Julia,f ,r壓的無路可走了嗎?
Spark 如果以後的世界發展到不需要程式設計就能解決問題,不管是Python R還是Julia F 都會被時代淘汰掉,不是危言聳聽,已經有一些軟體具備這樣的實力了,10年後大家再看這個世界會變成什麼樣。 lalala 不可能很明顯,python在人工智慧等的浪潮下碾壓其他是有前置條件的,比如你有一...