自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

人生苦短 我用Python [0x01] 動態(tài)加載模塊

開發(fā) 開發(fā)工具
程序模塊化是軟件工程里面一個常見的設(shè)計(jì)思想,在軟件開發(fā)也比較常見,可以把代碼解耦,特別是在面對多人同時(shí)開發(fā)或者需要經(jīng)常變動升級。

背景

程序模塊化是軟件工程里面一個常見的設(shè)計(jì)思想,在軟件開發(fā)也比較常見,可以把代碼解耦,特別是在面對多人同時(shí)開發(fā)或者需要經(jīng)常變動升級。我們使用windows常見的dll就是模塊化的一個例子,一個軟件升級功能,可能就只需要升級一些dll文件就可以了,主題程序不用改動,又比如一些新功能可以用模塊的方式加載等,不僅有利于開發(fā)者還方便了使用者。

python的動態(tài)加載模塊

在python里面,導(dǎo)入一個模塊使用的是

  1. import 模塊名 

python會在sys.path里面尋找匹配名稱的文件(py, pyo, pyc, pyd, so, dll)等文件,我們可以在python里面打印sys.path是些什么目錄

  1. import sys 
  2. sys.path 
  3. #返回下面內(nèi)容 
  4. ['''/usr/lib64/python26.zip''/usr/lib64/python2.6''/usr/lib64/python2.6/plat-linux2''/usr/lib64/python2.6/lib-tk''/usr/lib64/python2.6/lib-old''/usr/lib64/python2.6/lib-dynload''/usr/lib64/python2.6/site-packages''/usr/lib64/python2.6/site-packages/gtk-2.0''/usr/lib/python2.6/site-packages''/usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info'

在代碼運(yùn)行目錄下的文件名也可以作為模塊名導(dǎo)入,比如當(dāng)前目錄下有一個名字叫tools.py的文件,直接在代碼里面import這個文件名導(dǎo)入。import之后的模塊會保存在sys.modules里面

我們可以看到我們剛才加載的tools.py

但是import只能夠加載固定名稱模塊,不能加載動態(tài)比如字符串名稱模塊,比如

  1. str = 'tools' 
  2. import str 
  3. #提示錯誤 
  4. Traceback (most recent call last): 
  5.   File "", line 1, in  
  6. ImportError: No module named str 

這個時(shí)候,我們需要用到__import__,這是一個python的內(nèi)置函數(shù),import底層其實(shí)也是使用了這個函數(shù)加載模塊的,我們可以看看

  1. __import__ 
  2. #返回 
  3.  
  4. str = 'tools' 
  5. __import__(str) 
  6. #返回加載tools.py成功 

好了,現(xiàn)在解決了動態(tài)加載隨意模塊的問題了,但是距離成功還有一步之遙,在python里面,加載模塊是有緩存的,意思就是說,加載tools.py之后,就算tools.py內(nèi)容發(fā)生改變了,都不會重新加載,還是無法滿足我們實(shí)時(shí)更新加載模塊的需求。這里有個比較簡單的辦法,可以使得模塊有需要的時(shí)候重新加載,回想之前我們說過,python加載后的模塊都回保存在sys.modules里面,我們只需要再重新加載模塊之前,把模塊從sys.modules里面刪除即可。

  1. del sys.modules['tools'
  2. __import__('tools'

使用python這樣的特性,我們寫代碼的時(shí)候,就可以把經(jīng)常需要變動的剝離出來成為一個python模塊,需要的時(shí)候動態(tài)更新然后重新加載到主程序里面,可以***實(shí)現(xiàn)不中斷服務(wù)升級。

【本文是51CTO專欄機(jī)構(gòu)作者“睿江云EflyCloud”的原創(chuàng)文章,轉(zhuǎn)載請聯(lián)系原作者】

戳這里,看該作者更多好文

責(zé)任編輯:武曉燕 來源: 51CTO專欄
相關(guān)推薦

2017-06-05 08:55:27

Python起源應(yīng)用

2017-03-23 10:42:05

Pythonjava開發(fā)

2017-06-19 09:59:32

Python調(diào)試

2017-06-20 15:02:48

ChromeWebKit內(nèi)核

2017-03-07 10:07:25

PythonIDE

2018-04-05 22:42:43

2020-11-03 11:18:35

Go語言GoLang編程語言

2021-03-23 11:02:27

ManjaroLinux

2020-12-15 15:21:41

C++JavaPython

2014-09-26 09:29:12

Python

2019-11-18 14:20:33

Python 開發(fā)編程語言

2018-04-16 09:31:17

2021-04-18 07:20:09

CMS系統(tǒng)模塊

2020-04-07 11:23:20

Python 開發(fā)編程語言

2016-11-04 13:30:07

Python運(yùn)維工程師

2021-04-16 11:27:16

Python表情微信

2020-11-09 14:26:30

GitHub 技術(shù)開源

2021-09-18 12:05:59

Python 開發(fā)編程語言

2019-03-11 13:14:59

開發(fā)者

2018-08-09 18:27:03

編程語言JavaPython
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號