日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

python的全局变量能暂存数据吗_【Python】Python之全局变量

發布時間:2024/9/19 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python的全局变量能暂存数据吗_【Python】Python之全局变量 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

????最近的兩個Python項目由于使用多線程的緣故,需要頻繁用到全局變量。在Tcl/tk中可以使用命名空間的形式限制全局變量的引用范圍。但是在Python中似乎沒有看到類似的定義。在網上看了看關于全局變量的使用方法,大都是提醒盡量不要使用全局變量,因為:(以下為引用)

?

“應該盡量避免使用全局變量。不同的模塊都可以自由的訪問全局變量,可能會導致全局變量的不可預知性。對全局變量,如果程序員甲修改了_a的值,程序員乙同時也要使用_a,這時可能導致程序中的錯誤。這種錯誤是很難發現和更正的。

全局變量降低了函數或模塊之間的通用性,不同的函數或模塊都要依賴于全局變量。同樣,全局變量降低了代碼的可讀性,閱讀者可能并不知道調用的某個變量是全局變量。”

(引用結束)

經過師傅的提醒,我找到一個比較簡單快捷,而且和Tcl/tk有同樣用法的方法:將全局數據保存至文件!

思路很簡單,將需要調用的全局數據保存至一個或多個文件,當程序需要調用時,Python直接使用import載入,Tcl直接使用source -encoding utf-8 filename。這樣就可以避免上述使用global聲明所帶來的困擾了。而且這樣還有一個好處,那就是在調試程序時,不用等待程序正式運行時產生數據,而可以在數據文件中直接手動添加/修改!大大提高了工作效率有木有?!

以下是Python中保存全局數據到文件的例子:

def?save_init():

'''Save?init?data?from?last?correct?config'''

save_init?=?open('init.py','w')

save_init.write("#BMC?IP?Pool\n")

save_init.write("BMC_IP_START?='%s'\n"%BMC_IP_START.get())

save_init.write("BMC_IP_END?='%s'\n"%BMC_IP_END.get())

save_init.write("BMC_USER?='%s'\n"%BMC_USER.get())

save_init.write("BMC_PSW?='%s'\n"%BMC_PSW.get())

save_init.close()

上面的方法,將全局數據寫入init.py

以下是調用全局數據文件的例子:

#Import?Data?from?last?correct?config.

try:

import?init

BMC_IP_START.set(init.BMC_IP_START)

BMC_IP_END.set(init.BMC_IP_END)

BMC_USER.set(init.BMC_USER)

BMC_PSW.set(init.BMC_PSW)

except?(ImportError,AttributeError):

print("init.py:?No?found?init?data!")

注意這里,我使用了try語句。因為并不能保證數據文件里有數據,例如當程序第一次運行還沒有產生數據時。此時調用會產生錯誤,所以要用try語句處理異常。當第二次運行時,文件里已經有數據時,就沒有問題了。

注意,Python的文件載入,也就是import動作只進行一次。因此,用這種方法保存的全局數據經常需要變動時,如果在變動后使用,需要重新載入,否則調用的一直是第一次import時候的數據。重新載入需要用到imb模塊:

from?imp?import?reload

import?init

reload(init)

這樣,就完全避免了傳統全局數據引用的弊端。

總結

以上是生活随笔為你收集整理的python的全局变量能暂存数据吗_【Python】Python之全局变量的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。