Python_import機制
有些東西不能忘!
我之所以開始接觸到它(Python)是因為機器學習的部分,
在使用的過程中逐漸了解它是個什麼個性的語言。
對它我打算從import模組開始寫。
前言:
Python 一種物件導向直譯式語言,因為它的強大,我決定這麼叫它,高階的腳本語言(綜合高階語言與它的分類腳本語言),語法簡單易讀,它的官方直譯器由C所寫成,由於它的擴展性可以使用C、C++、CPython來編寫擴充模組,這個特性更造就它成為接著劑的角色(膠水語言 PyV8就是一個例子)。到這邊我就忍不住腦補,它是個多麼善解人(?)意的語言啊!
(請容許我動不動就擬人化)除了遊走在不同語言之間,戴上不同的模組,又能前往不同領域,感覺社交能力很好(笑),好了!差不多該進入今天的主題。
- Import Module 參考 <http://www.popjb.com/40167.html>
顧名思義 我們需要加載已經寫好的源碼,直接作為這次編碼的工具。
- sys : 系統模組,假想成這是個劇組單位。
- sys.modules : 加載的模組會放在這裡,假想成演員休息室。
- sys.path : 可以使用的模組路徑都在這裡,假想成演員聯絡表。 (會從path環境變數的位置查找安裝的模組)
- hero.py : 這次要執行它的程式,假想為這次的主人公。
- heroine.py : 要被加載的模組,假想為故事女主角。
- supporting.py : 要被加載的包模組,假想為故事配角。
在Python世界裡,要加載模組,需要先檢查sys.modules裡面有沒有被加載(已經被加載過的模組會變編譯成二元碼,.pyc檔。),如果沒有的話會先到sys.path看看要去哪找(可以加載的種類: .py .pyc .pyd),再把它加載進來,如果還是沒有找到的話,就會報錯說:
從path變數路徑下找不到該模組。
這個概念轉換成劇組模式,今天要拍的場景有女主角的戲份,我們先去休息室看看她在不在,不在的話就透過連絡方式聯絡她,如果都沒有的話,就表示一開始就沒找好人啊~~
*這邊有個疑惑點: 這個加載流程被註明是給標準模組 -->也就是原生自帶模組 (重要角色群)
所以配角們(其他site-packages或自定義packages)沒有休息室? (錯愕)我有點疑惑到底是不是所有來源的模組都會在sys.modules裡。
既然有疑問就來測測看,發現他是以字典的方式儲存。
再進一步把內容印出來,發現載入的大家都在休息室裡,真是太好了!
sys.modules : "來自內核源碼目錄的目的檔案,描述一個模組為之建立的環境"
Python世界裡還有命名空間,我們將會用到的全域變數放進去,
稱為local name space。
稱為local name space。
每個執行程式有自己的命名空間,被加載進來的模組名字會被放進去,名字在裡面才能使用,也就是該模組才有已物件變數的方式存在。被加載的模組,就可以使用他的class/function/variable。
這種感覺就像是,這個場景的出場演員表吧~演員表上有該人的名字,才可以請他出來演,而演員會的演技可以再有需求的情況被發揮。
import package ,需要再該檔案夾建立一個__init__.py,來告訴系統這是一個模組包,並在該py檔內描寫初始化要做的事。
連結成supporting.py,可以想成,配角們總是從某些情節關係裡衍生出來的,所以需要一些預設場景,雖然我覺得這個形容蠻微妙,總之配角有時候也可能發展出配角傳之類的~
關於一些語法/keywords:
from module import function as nickname
如果是特定的只想模組的某個內部成員,需要用from。
來自 某人 的 演技 稱為 XX演技 <--大概這種感覺吧 哈哈
臨演: sys.path.append("module's path")
因為path是list型態 所以使用append
總結:
正確的import之後,就可以享受大神的恩惠了!
大家一起來當導演吧~(笑)
大家一起來當導演吧~(笑)
後記: 用例子聯想轉化只是為了幫助我自己作記憶。
留言
張貼留言