中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

python如何重載模塊實例解析

發布時間:2020-10-09 11:55:01 來源:腳本之家 閱讀:129 作者:suipingsp 欄目:開發技術

本文首先介紹了Python中的模塊的概念,談到了一個模塊往往由多個模塊組成,然后通過具體實例,分析了模塊重載的相關內容,具體介紹如下。

模塊是Python程序架構的一個核心概念,較大的程序往往以多個模塊文件的形式呈現,一個模塊被設計成主文件或頂層文件,用來啟動整個Python程序。每個以.py為后綴的Python源代碼文件都是一個模塊,其他文件可通過“導入”讀取這個模塊的內容。從一般意義上講,模塊就是變量名的封裝。如寫一個模塊test.py,包含一個兩個變量名name、age。

name='Aidan' 
age=27 

那么,通過在Python命令行中執行下述命令

import test 
print(test.name, test.age) 

可以得到結果:Aidan 27

函數dir(modelname)可以用來獲取模塊內部可用的變量名,其中會包含一些Python內置的變量名如'__doc__、__file__'。
一個Python程序往往由多個模塊組成,通過import連接。每個模塊文件都是一個命名空間,看不到其他模塊文件的變量名,除非通過import導入了那個文件或者通過from model import varible導入某個變量。這樣就避免了變量命名的沖突,因為每個模塊都是獨立的命名空間,類似于C語言里一個個函數和其局部變量。

從本質上,“導入”就是在一個文件中載入另一個文件的內容,從而使另一個文件能夠被放在外部世界使用,指令就是import name.py。導入只在每次會話的第一次執行有效果,后續再多次導入同一個文件時無效的,即使文件發生了更改,這是因為第一次導入時就將文件編譯成了字節碼。導入模塊必須知道模塊的詳細路徑(文件搜索,可通過sys.path中PYTHONPATH變量指明所有需要搜索的目錄),因此為了簡單,將所有需要導入的文件放在同一個目錄。

若想在同一次會話中多次運行同一個文件(或文件發生改變、必須重載),那就需要調用“重載”函數-reload(name),調用reload函數前請確保已經通過import成功導入了該模塊。看清“函數”reload()和“語句”import的區別,reload()是一個函數、參數就是已導入的文件模塊文件名,import是一個語句、不需要括號。Python的重載功能允許用戶在交互過程中編輯并改進代碼模塊,因此為了確保運行的是最新的代碼,首先使用reload()。

flask 在調試時,如果我們對文件有所修改,服務器就會重新啟動,而無需我們停下服務器再重新啟動,這里面就暗藏了一個重載的機制。

下面用一個簡單的例子,來解釋python如何重載一個模塊

新建一個名為reloadsetting.py 的文件,內容很簡單:

#coding=utf-8 
''''' 
Created on 2016-3-25 
 
@author: Administrator 
''' 
 
msg = 'change it ' 

再新建一個名稱為reloaddemo.py的文件,內容為:

#coding=utf-8 
''''' 
Created on 2016-3-25 
 
@author: Administrator 
''' 
import threading 
import reloadsetting 
import sys,os, time 
 
 
def printworker(): 
  while True: 
    time.sleep(1) 
    print reloadsetting.msg 
   
def auto_reload(): 
  while True: 
     
    mods = ["reloadsetting"] # the need reload modules 
    
    for mod in mods: 
      try: 
        module = sys.modules[mod] 
      except: 
        continue 
       
      #獲得文件的名字 
      filename = module.__file__ 
       
      #pyc結尾的文件,只在第一次載入時生成,因此,即便我們對文件進行了修改,運行中,它的修改時間是不會變的 
      if filename.endswith(".pyc"): 
        filename = filename.replace(".pyc", ".py") 
      #獲得文件上一次修改的時間 
      mod_time = os.path.getmtime(filename) 
      #module.__dict__ 里保存了模塊的信息,具體參考globals函數 
      if not "loadtime" in module.__dict__: 
        module.loadtime = 0 # first load's time 1* 
      try: 
        #如果修改時間大于上一次載入的時間,那么就重新載入 
        if mod_time > module.loadtime: 
          reload(module) 
      except: 
        pass 
    
      module.loadtime = mod_time 
      time.sleep(1) 
if __name__ == '__main__': 
  t_reload = threading.Thread(target=auto_reload) 
  t_reload.start() 
   
  t_reload2 = threading.Thread(target=printworker) 
  t_reload2.start() 

我們啟動運行reloaddemo.py ,一個線程不停的打印reloadsetting模塊中的msg,一個線程不停的嘗試重載reloadsetting模塊。在運行過程中,修改reloadsetting模塊中的msg的內容,很快,打印出來的內容也會隨之發生變化,你可能會擔心,如果在修改時不慎寫錯了代碼,比如把msg給刪除掉了,或者寫成了 msg = ,而后面根本就沒有賦值,那重載豈不是就失敗了么,這種擔憂是多余的,即便模塊reloadsetting中有錯誤,那么在調用reload函數時,也不會發生錯誤,模塊仍然是上一次有效reload后的狀態,不信,你可以試一試

總結

以上就是本文關于python如何重載模塊實例解析的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

向AI問一下細節

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

AI

周口市| 汉寿县| 延寿县| 霍山县| 潼南县| 乐亭县| 巴彦淖尔市| 肃宁县| 太仓市| 葵青区| 武穴市| 和顺县| 洛南县| 古丈县| 宜君县| 徐闻县| 宁国市| 海伦市| 富裕县| 建昌县| 土默特右旗| 扬中市| 肃北| 永泰县| 鄂尔多斯市| 商丘市| 股票| 邢台县| 卓尼县| 城口县| 临夏市| 阿克陶县| 塔城市| 奈曼旗| 普定县| 惠水县| 泾川县| 岢岚县| 彩票| 山阳县| 德江县|