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

溫馨提示×

溫馨提示×

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

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

Python模塊的加載講解

發布時間:2020-09-12 01:33:05 來源:腳本之家 閱讀:171 作者:hiekay 欄目:開發技術

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

$ 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會按照下面的順序來找那個將要導入的模塊文件

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

Python模塊的加載講解

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

Python模塊的加載講解

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

重載模塊

以mmmm模塊為例。

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

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

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

#!/usr/bin/env python
#coding:utf-8
web = "https://hiekay.github.io, I am writing a python book on line. "
def my_name(name):
  print name
class pythoner:
  def __init__(self,lang):
    self.lang = lang
  def programmer(self):
    print "python programmer language is: ",self.lang

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

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

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

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

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

>>> reload(mmmm)
<module 'mmmm' from 'mmmm.py'>
>>> mmmm.web
'https://hiekay.github.io, I am writing a python book on line. '

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

特別提醒注意:

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對億速云的支持。如果你想了解更多相關內容請查看下面相關鏈接

向AI問一下細節

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

AI

三台县| 清水河县| 和平县| 临桂县| 华阴市| 凤庆县| 高台县| 惠州市| 吉安县| 淮南市| 阜康市| 留坝县| 清丰县| 南投市| 惠来县| 平定县| 泸州市| 沁水县| 巴东县| 昌黎县| 永福县| 游戏| 泌阳县| 浑源县| 沈丘县| 武功县| 莱阳市| 布拖县| 佛学| 山阴县| 大石桥市| 华蓥市| 志丹县| 克拉玛依市| 共和县| 拉萨市| 泸州市| 上犹县| 望都县| 曲松县| 峡江县|