亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python如何重載模塊實(shí)例解析

 更新時(shí)間:2018年01月25日 16:58:07   作者:suipingsp  
這篇文章主要介紹了python如何重載模塊實(shí)例解析,涉及模塊的概念,載入和重載的實(shí)例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下

本文首先介紹了Python中的模塊的概念,談到了一個(gè)模塊往往由多個(gè)模塊組成,然后通過(guò)具體實(shí)例,分析了模塊重載的相關(guān)內(nèi)容,具體介紹如下。

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

name='Aidan' 
age=27 

那么,通過(guò)在Python命令行中執(zhí)行下述命令

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

可以得到結(jié)果:Aidan 27

函數(shù)dir(modelname)可以用來(lái)獲取模塊內(nèi)部可用的變量名,其中會(huì)包含一些Python內(nèi)置的變量名如'__doc__、__file__'。
一個(gè)Python程序往往由多個(gè)模塊組成,通過(guò)import連接。每個(gè)模塊文件都是一個(gè)命名空間,看不到其他模塊文件的變量名,除非通過(guò)import導(dǎo)入了那個(gè)文件或者通過(guò)from model import varible導(dǎo)入某個(gè)變量。這樣就避免了變量命名的沖突,因?yàn)槊總€(gè)模塊都是獨(dú)立的命名空間,類(lèi)似于C語(yǔ)言里一個(gè)個(gè)函數(shù)和其局部變量。

從本質(zhì)上,“導(dǎo)入”就是在一個(gè)文件中載入另一個(gè)文件的內(nèi)容,從而使另一個(gè)文件能夠被放在外部世界使用,指令就是import name.py。導(dǎo)入只在每次會(huì)話的第一次執(zhí)行有效果,后續(xù)再多次導(dǎo)入同一個(gè)文件時(shí)無(wú)效的,即使文件發(fā)生了更改,這是因?yàn)榈谝淮螌?dǎo)入時(shí)就將文件編譯成了字節(jié)碼。導(dǎo)入模塊必須知道模塊的詳細(xì)路徑(文件搜索,可通過(guò)sys.path中PYTHONPATH變量指明所有需要搜索的目錄),因此為了簡(jiǎn)單,將所有需要導(dǎo)入的文件放在同一個(gè)目錄。

若想在同一次會(huì)話中多次運(yùn)行同一個(gè)文件(或文件發(fā)生改變、必須重載),那就需要調(diào)用“重載”函數(shù)-reload(name),調(diào)用reload函數(shù)前請(qǐng)確保已經(jīng)通過(guò)import成功導(dǎo)入了該模塊??辞濉昂瘮?shù)”reload()和“語(yǔ)句”import的區(qū)別,reload()是一個(gè)函數(shù)、參數(shù)就是已導(dǎo)入的文件模塊文件名,import是一個(gè)語(yǔ)句、不需要括號(hào)。Python的重載功能允許用戶(hù)在交互過(guò)程中編輯并改進(jìn)代碼模塊,因此為了確保運(yùn)行的是最新的代碼,首先使用reload()。

flask 在調(diào)試時(shí),如果我們對(duì)文件有所修改,服務(wù)器就會(huì)重新啟動(dòng),而無(wú)需我們停下服務(wù)器再重新啟動(dòng),這里面就暗藏了一個(gè)重載的機(jī)制。

下面用一個(gè)簡(jiǎn)單的例子,來(lái)解釋python如何重載一個(gè)模塊

新建一個(gè)名為reloadsetting.py 的文件,內(nèi)容很簡(jiǎn)單:

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

再新建一個(gè)名稱(chēng)為reloaddemo.py的文件,內(nèi)容為:

#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結(jié)尾的文件,只在第一次載入時(shí)生成,因此,即便我們對(duì)文件進(jìn)行了修改,運(yùn)行中,它的修改時(shí)間是不會(huì)變的 
      if filename.endswith(".pyc"): 
        filename = filename.replace(".pyc", ".py") 
      #獲得文件上一次修改的時(shí)間 
      mod_time = os.path.getmtime(filename) 
      #module.__dict__ 里保存了模塊的信息,具體參考globals函數(shù) 
      if not "loadtime" in module.__dict__: 
        module.loadtime = 0 # first load's time 1* 
      try: 
        #如果修改時(shí)間大于上一次載入的時(shí)間,那么就重新載入 
        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() 

我們啟動(dòng)運(yùn)行reloaddemo.py ,一個(gè)線程不停的打印reloadsetting模塊中的msg,一個(gè)線程不停的嘗試重載reloadsetting模塊。在運(yùn)行過(guò)程中,修改reloadsetting模塊中的msg的內(nèi)容,很快,打印出來(lái)的內(nèi)容也會(huì)隨之發(fā)生變化,你可能會(huì)擔(dān)心,如果在修改時(shí)不慎寫(xiě)錯(cuò)了代碼,比如把msg給刪除掉了,或者寫(xiě)成了 msg = ,而后面根本就沒(méi)有賦值,那重載豈不是就失敗了么,這種擔(dān)憂是多余的,即便模塊reloadsetting中有錯(cuò)誤,那么在調(diào)用reload函數(shù)時(shí),也不會(huì)發(fā)生錯(cuò)誤,模塊仍然是上一次有效reload后的狀態(tài),不信,你可以試一試

總結(jié)

以上就是本文關(guān)于python如何重載模塊實(shí)例解析的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專(zhuān)題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!

相關(guān)文章

  • Python枚舉類(lèi)定義和使用方法

    Python枚舉類(lèi)定義和使用方法

    這篇文章主要介紹了Python枚舉類(lèi)定義和使用方法,文章圍繞主題的相關(guān)資料展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • 在PyTorch中自定義fit()函數(shù)中的操作代碼

    在PyTorch中自定義fit()函數(shù)中的操作代碼

    當(dāng)在進(jìn)行有監(jiān)督學(xué)習(xí)時(shí),我們可以使用fit()函數(shù)對(duì)模型進(jìn)行訓(xùn)練,通過(guò)迭代優(yōu)化模型的參數(shù),使其能夠更好地?cái)M合訓(xùn)練數(shù)據(jù),本文給大家介紹了在PyTorch中自定義fit()函數(shù)中的操作代碼,感興趣的同學(xué)可以跟著小編一起來(lái)看看
    2024-05-05
  • python爬蟲(chóng)的數(shù)據(jù)庫(kù)連接問(wèn)題【推薦】

    python爬蟲(chóng)的數(shù)據(jù)庫(kù)連接問(wèn)題【推薦】

    這篇文章主要介紹了python爬蟲(chóng)的數(shù)據(jù)庫(kù)連接問(wèn)題,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-06-06
  • 基于python實(shí)現(xiàn)簡(jiǎn)單日歷

    基于python實(shí)現(xiàn)簡(jiǎn)單日歷

    這篇文章主要為大家詳細(xì)介紹了基于python實(shí)現(xiàn)簡(jiǎn)單日歷,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Python中True(真)和False(假)判斷詳解

    Python中True(真)和False(假)判斷詳解

    眾所周知True和False是一個(gè)布爾變量可取的值,下面這篇文章主要給大家介紹了關(guān)于Python中True(真)和False(假)判斷的相關(guān)資料,本文通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • Python更新所有已安裝包的操作

    Python更新所有已安裝包的操作

    今天小編就為大家分享一篇Python更新所有已安裝包的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • Python文件時(shí)間操作步驟代碼詳解

    Python文件時(shí)間操作步驟代碼詳解

    這篇文章主要介紹了Python文件時(shí)間操作步驟代碼詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • python利用socketserver實(shí)現(xiàn)并發(fā)套接字功能

    python利用socketserver實(shí)現(xiàn)并發(fā)套接字功能

    這篇文章主要為大家詳細(xì)介紹了python利用socketserver實(shí)現(xiàn)并發(fā)套接字功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Python錯(cuò)誤和異??偨Y(jié)詳細(xì)

    Python錯(cuò)誤和異??偨Y(jié)詳細(xì)

    本文詳細(xì)且清晰地講解了Python中錯(cuò)誤和異常的概念及其處理方式,通過(guò)具體案例展示try...except、try...finally、with...等句式的具體用法,期望能幫助到對(duì)此感到迷惑的初學(xué)者
    2021-10-10
  • Python 內(nèi)置函數(shù)complex詳解

    Python 內(nèi)置函數(shù)complex詳解

    這篇文章主要介紹了Python 內(nèi)置函數(shù)complex詳解的相關(guān)資料,需要的朋友可以參考下
    2016-10-10

最新評(píng)論