亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

跟老齊學Python之模塊的加載

系統 1761 0

不管是用import還是用from mmmm import *的方式導入模塊,當程序運行之后,回頭在看那個存儲著mmmm.py文件的目錄中(關于mmmm.py文件可以看上一講),多了一個文件:

          
            
              
qw
              
                @qw
              
              -
              
                Latitude
              
              -
              
                E4300
              
              
                :~/Documents/ITArticles/BasicPython/codes
              
              
                $ 
              
              ls mmm*
mmmm.py mmmm.pyc
            
在這個目錄下面,除了原來的那個mmmm.py之外,又多了一個mmmm.pyc文件,這個文件不是我寫的,是哪里來的呢?

要破開此迷,需要用import的過程說起。

import的工作流程

import mmmm,并不是僅僅將mmmm.py這個文件裝載到當前位置(文件內),其實是首先進行了一次運算。當mmmm.py被第一次導入的時候,python首先要對其進行編譯,生成擴展名為.pyc的同名文件,然后才執行mmmm模塊的代碼,創建相應的對象等。就如同把大象裝進冰箱,有三步要執行:

搜索。就是python要能夠找到import的模塊。怎么找到,后面講述。編譯。找到模塊文件之后,將其編譯成字節碼,就是那個.pyc文件里面的(關于字節碼,下面會介紹,請繼續閱讀)。注意,不是什么時候都編譯的,只有第一次運行時候才編譯,如果mmmm.py文件改變了,相當于又一個新文件,也會從新編譯。其實就是.pyc文件中有一個時間戳,python會自動檢查這個時間戳,如果它比同名的.py文件時間戳舊,就會從新編譯。否則跳過。當然,如果根本就沒有找到同名的.py源文件,只有字節碼文件.pyc,那么就只能運行這個了。運行。這就沒什么好說的了,生米已經淘干凈了,并且放到鍋里,開始加熱了,最后就只能熟飯了。執行就是前面已經編譯的模塊字節碼文件,順理成章要執行了。搜索模塊

一般情況下,python會自動的完成模塊搜索過程。但是,在某些情況下,或許會要求程序員來設定搜索路徑。當import一個模塊后,python會按照下面的順序來找那個將要導入的模塊文件

程序的主目錄。上一講中,在codes這個目錄中運行交互模式,這時候的主目錄就是codes,當在那個交互模式中運行import mmmm的時候,就首先在codes這個目錄中搜索相應的文件(找到.py之后編譯成為.pyc)。當然,后面在網頁編程中,看官會看到,所謂主目錄是可以通過頂層文件設置的目錄。PYTHONPATH目錄。這是一個環境變量設置,如果沒有設置則濾去。如何進行環境變量設置,請看官google啦。標準庫目錄。已經隨著Python的安裝進入到計算機中的那個。任何.pth文件的內容。如果有這類文件,最后要在這類文件中搜索一下。這是一個簡單的方法,在.pth文件中,加入有效目錄,使之成為搜索路徑。下圖就是我的計算機上,存放.pth文件的位置以及里面放著的.pth文件

看官也可以自己編寫.pth文件,里面是有關搜索目錄,保存到這里。比如,打開目錄中的easy-install.pth文件,發現的內容:

搜索就是這么一個過程。這里建議看官了解即可,不一定非要進行什么設置,在很多情況下,python都是會自動完成的。特別是初學者,暫且不要輕舉妄動。

重載模塊

以mmmm模塊為例(在這里要特別提醒看官:我這樣命名是相當不好滴,只不過是為了惡搞才這樣命名的)。

在一個shell里面,運行了python,并且做了如下操作:

          
            >>> import mmmm
            
>>> mmmm.web
'https://qiwsir.github.io'

下面我再打開一個shell,編輯mmmm.py這個文件,進行適當修改:

跟老齊學Python之模塊的加載_第1張圖片

保存之后,切換到原來的那個導入了模塊的交互模式:

          
            >>> mmmm.web
            
'https://qiwsir.github.io'

輸出的跟前面的一樣,沒有任何變化,這是為什么呢?

原來,當導入模塊的時候,只會在第一次導入時加載和執行模塊代碼,之后就不會重新加載或重新執行了,如果模塊代碼修改了,但是這里執行的還是修改之前的。

怎么實現代碼修改之后,執行新的呢?一種方式就是退出原來的交互模式,再重新進入,再import mmmm。呵呵,這種方法有點麻煩。Python提供了另外一個函數――reload函數,能夠實現模塊的重新加載(簡稱重載),重載后模塊代碼重新執行。如下繼續:

          
            >>> reload(mmmm)
            

>>> mmmm.web
'https://qiwsir.github.io, I am writing a python book on line.'

這下就顯示修改之后的內容了。

特別提醒注意:

reload是內置函數reload(module),module是一個已經存在的模塊,不是變量名。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产精品免费大片 | 久久国产精品亚洲一区二区 | 国产成人综合91精品 | 午夜视频www | a在线观看 | 亚洲一区二区久久 | 久久99久久99小草精品免视看 | 激情网婷婷 | 不卡中文字幕在线观看 | 日日操日日操 | 天天摸天天干天天操 | 亚洲国产伦理 | 国产毛片哪里有 | 四虎国产精品永久地址48 | 中文字幕在线精品视频入口一区 | 一级毛片真人免费观看 | 六月婷婷中文字幕 | 四虎影院wwww | 亚洲加勒比久久88色综合1 | 亚洲视频a | 尹人香蕉99久久综合网站 | 亚洲一区在线免费观看 | 午夜成人在线视频 | 日本一级毛片无遮挡 | 日本一级毛片在线播放 | 最近在线更新中文字幕1 | 久草中文网 | 天天干天天干天天干天天干天天干 | 九九热这里只有 | 美女粉逼 | 愉拍自拍 | 久草视频在线资源 | 国内精品久久久久影院嫩草 | 国产精品公开免费视频 | 无遮挡一级毛片呦女视频 | 午夜探花 | 日韩中文字幕一区 | 国产精品午夜免费福利视频 | 欧美黄色免费在线观看 | 国产大片中文字幕在线观看 | 精品的一区二区三区 |