python動態(tài)加載變量示例分享
眾所周知,程序在啟動后,各個程序文件都會被加載到內(nèi)存中,這樣如果程序文本再次變化,對當(dāng)前程序的運(yùn)行沒有影響,這對程序是一種保護(hù)。
但是,對于像python這樣解釋執(zhí)行的語言,我們有時候會用到“from 模塊 import 變量名”這樣的形式,如果這個變量直接被定義在文件當(dāng)中,那么這些變量在程序開始時就會被定義、賦值,運(yùn)行過程中值不變。如果打算在運(yùn)行過程中對這個模塊進(jìn)行重寫,那么更改后的變量值是無法被使用的。
對于這個問題,可以換一種思路,將這個模塊中的變量定義在函數(shù)里,而函數(shù)是在程序運(yùn)行的時候動態(tài)執(zhí)行的,這樣就能夠獲取到變量的最新值。下面是例子:
首先,不使用函數(shù)的情況:
#model1.py
p_hello = 'hello world!'
#test1.py
from model1 import p_hello
file = open('model1.py', 'w')
file.write("p_hello = '%s!'"%('hello you'))
file.close()
print p_hello
這樣,執(zhí)行test1.py的時候,出現(xiàn)的結(jié)果仍然是'hello world',而非‘hello you',說明變量已經(jīng)加載到內(nèi)存中,盡管該模塊的文件在硬盤上已經(jīng)被重寫。
接下來,使用函數(shù)的情況:
#model1.py
def rule():
p_hello = 'hello world!'
return locals()
#test1.py
from model1 import rule
file = open('model1.py', 'w')
file.write('def rule():\n')
file.write(" p_hello = '%s!'\n"%('hello you'))
file.write(" return locals()\n")
file.close()
p_hello = rule()['p_hello']
print p_hello
這樣,print出來的結(jié)果就是hello you 了,因?yàn)樵谶\(yùn)行的時候,先執(zhí)行了一遍這個函數(shù),再通過函數(shù)獲取了這個變量,這樣就會獲得新值。
相關(guān)文章
Python執(zhí)行系統(tǒng)命令的五種方式小結(jié)
在日常開發(fā)中,有時需要在Python腳本中執(zhí)行系統(tǒng)命令,Python有五種方式來執(zhí)行系統(tǒng)命令(推薦使用第五種),本文為大家整理了這五種方法的具體使用,希望對大家有所幫助2024-01-01
Python開發(fā)一個功能齊全的IM聊天工具(附實(shí)例代碼)
即時通訊(IM)工具現(xiàn)在已經(jīng)很常見了,從簡單的文本聊天到文件傳輸、音視頻通話,IM 工具功能豐富,那么,本文使用Python開發(fā)一個基礎(chǔ)的IM聊天工具,包括:客戶端和服務(wù)端架構(gòu)、實(shí)時消息發(fā)送與接收、多用戶聊天支持、一個簡單的圖形用戶界面(GUI)2024-12-12
Python基于lxml模塊解析html獲取頁面內(nèi)所有葉子節(jié)點(diǎn)xpath路徑功能示例
這篇文章主要介紹了Python基于lxml模塊解析html獲取頁面內(nèi)所有葉子節(jié)點(diǎn)xpath路徑功能,結(jié)合實(shí)例形式較為詳細(xì)的分析了Python使用lxml模塊進(jìn)行xml節(jié)點(diǎn)數(shù)據(jù)解析的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2018-05-05
flask框架json數(shù)據(jù)的拿取和返回操作示例
這篇文章主要介紹了flask框架json數(shù)據(jù)的拿取和返回操作,結(jié)合實(shí)例形式分析了flask框架針對json格式數(shù)據(jù)的解析、數(shù)據(jù)庫操作與輸出等相關(guān)操作技巧,需要的朋友可以參考下2019-11-11
Python嵌套函數(shù),作用域與偏函數(shù)用法實(shí)例分析
這篇文章主要介紹了Python嵌套函數(shù),作用域與偏函數(shù)用法,結(jié)合實(shí)例形式分析了Python嵌套函數(shù),作用域與偏函數(shù)的功能、定義與相關(guān)使用方法,需要的朋友可以參考下2019-12-12

