最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python中的內置globals()函數實例詳解

 更新時間:2026年02月14日 11:50:02   作者:qq_44801116  
globals()函數是Python中的內置函數,用于返回當前模塊中定義的全局變量的字典,它可以用于動態(tài)批量處理全局變量/函數、調試時快速排查全局狀態(tài)問題,以及框架/庫的底層實現,本文介紹python中的內置globals()函數,感興趣的朋友跟隨小編一起看看吧

最近在看一段代碼時,發(fā)現作者使用globals()來應對無法確定變量名的情況,故此對該函數進行了詳細的了解。

一、基本情況

globals() 是Python的標準內置函數,用于返回當前模塊中定義的全局變量的字典(包含所有的全局變量、函數、類、導入的模塊),其中鍵是變量名,值是變量的值。字典可進行修改,修改后會隨之反映到全局變量上。對于函數內的代碼,返回的為在定義函數時確定的該字典,無論在哪里調用都保持不變。
globals是特殊場景的解決方案,如動態(tài)批量處理全局變量/函數(eg:配置加載)、調試時快速排查全局狀態(tài)問題、框架/庫的底層實現,且有完善的封裝和文檔。
缺點:可讀性差,命名沖突、作用域誤區(qū)、線程不安全、性能損耗、破壞封裝
重點:非必要不使用,優(yōu)先使用字典/類進行替代,使用時做好校驗、鎖和注釋。

二、常用場景實例

核心價值是動態(tài)操作全局命名空間,由于操作的是全局狀態(tài),使用時需要謹慎。
1、批量處理配置變量、根據配置變量名讀取對應的值

config0= 10
config1 = 30
config2 = "INFO"
# 變量名來自外部(如配置文件、用戶輸入)
config_keys = ["config0", "config1", "config2"]
# 動態(tài)讀取所有配置
for key in config_keys:
    if key in globals():
        print(f"{key}: {globals()[key]}")

運行結果:

2、批量初始化
編碼前,無法預知所有的變量名或需要生成大量相似的變量名,需要通過代碼邏輯批量生成全局變量

3、函數內部修改全局變量
編碼需要時,則需要使用,此處不進行舉例說明了。

三、使用注意事項

globals()直接操作全局命名空間,濫用會導致代碼可讀性、可維護性大幅下降,甚至引發(fā)隱藏bug
1、嚴重降低代碼可讀性與可維護性
動態(tài)操作的變量/函數名是字符串,IDE無法自動補全、跳轉,代碼審查時難以追蹤變量的定義/修改位置,后期維護成本高,如下圖所示:

上方globals()里面變量/函數內容很多,某個變量隨時可能被其他方法更改,當出現問題時,排查很困難。下方單獨使用var_dict很清晰能知道變量是在哪里來的,在哪里修改的。
2、易引發(fā)命名沖突與意外覆蓋
全局命名空間包含模塊頂層定義的變量、函數、類等,globals()動態(tài)創(chuàng)建/修改變量,若名稱與已有重復,則會靜默覆蓋原有對象。
在程序中,如不小心覆蓋內置函數,在訪問中可能會遇到報錯,如下所示

在程序中,如多處動態(tài)給某個變量賦值,則會造成功能錯誤

如上所示,本身天津和重慶都有叫張三的,結果由于程序后面進行了覆蓋,只保留了最后的值。這種在程序中也不存在語法錯誤,在排查bug時會比較麻煩
建議:動態(tài)命名時加前綴,避免與內置名、已有變量重名
操作賦值前,先校驗是否為已有變量

3、globals()作用區(qū)域理解存在誤區(qū)
python中的幾種作用域可詳見:http://www.fzitv.net/python/344628qyu.htm
很多人會誤以為globals()可以獲取到外層函數作用域,實際是未搞清楚外層函數的變量的作用域為嵌套作用域,不會影響全局變量。嵌套函數想訪問外層函數變量,需要使用nonlocal或local(),而非globals()

4、多線程時,存在線程安全問題
多線程同時通過globals()讀寫全局變量時,同時修改一個變量,會導致數據不一致。

count = 0
def increment():
    for _ in range(100000):
        globals()["count"] += 1
t1 = threading.Thread(target=increment)
t2 = threading.Thread(target=increment)
t1.start()
t2.start()
t1.join()
t2.join()
print(count)

運行結果是200000,但是實際結果是隨機,如下

可以通過加鎖的形式,訪問全局變量從而保證結果的正確性。

def increment():
    for _ in range(100000):
        while threading.Lock():
            globals()["count"] += 1

5、性能損耗:尤其頻繁操作
globals返回的字典,字典的鍵查找/賦值比直接訪問變量要慢,尤其在頻繁操作時會累積性能損耗。
建議循環(huán)中需要頻繁操作局部變量時,先將賦值給局部變量,操作完成后再賦值給全局變量

到此這篇關于python中的內置globals()詳解的文章就介紹到這了,更多相關python內置globals()內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python pandas RFM模型應用實例詳解

    Python pandas RFM模型應用實例詳解

    這篇文章主要介紹了Python pandas RFM模型應用,結合實例形式詳細分析了pandas RFM模型的概念、原理、應用及相關操作注意事項,需要的朋友可以參考下
    2019-11-11
  • Python異常處理try語句應用技巧實例探究

    Python異常處理try語句應用技巧實例探究

    異常處理在Python中是至關重要的,try-except是用于捕獲和處理異常的核心機制之一,本文就帶大家深入了解如何使用try-except,處理各種異常情況
    2024-01-01
  • 七個非常實用的Python工具包總結

    七個非常實用的Python工具包總結

    Python 擁有海量的包,無論是普通任務還是復雜任務,我們經常在應用程序中使用大量的工具包.本文我將討論一些常被低估的數據科學包,包括:數據清理、應用程序開發(fā)和調試方面,需要的朋友可以參考下
    2021-06-06
  • python中abs&map&reduce簡介

    python中abs&map&reduce簡介

    map與reduce是兩個十分常用的Python內置函數,它們與Hadoop中的MapReduce在某些方面有一定的相似之處。
    2018-02-02
  • Python做文本按行去重的實現方法

    Python做文本按行去重的實現方法

    每行在promotion后面包含一些數字,如果這些數字是相同的,則認為是相同的行,對于相同的行,只保留一行。接下來通過本文給大家介紹Python做文本按行去重的實現方法,感興趣的朋友一起看看吧
    2016-10-10
  • Python使用unicodedata實現字符串標準化

    Python使用unicodedata實現字符串標準化

    這篇文章主要來和大家聊一聊 Python 的一個內置模塊:unicodedata,它是專門用來處理 unicode 字符串的,下面就一起來看看它的用法吧
    2023-06-06
  • Python -m參數原理及使用方法解析

    Python -m參數原理及使用方法解析

    這篇文章主要介紹了Python -m參數原理及使用方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • python實現矩陣打印

    python實現矩陣打印

    這篇文章主要為大家詳細介紹了python實現矩陣打印的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • python循環(huán)接收http請求數據方式

    python循環(huán)接收http請求數據方式

    這篇文章主要介紹了python循環(huán)接收http請求數據方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Python中使用Chaco繪圖庫

    Python中使用Chaco繪圖庫

    這篇文章主要介紹了Python中使用Chaco繪圖庫,Chaco是一個2D的繪圖庫,如果你安裝了Python(x,y)的話,可以在pythonxy的安裝目錄下的找到Chaco的demo程序,Chaco提供了類似Matlab和pylab的繪圖方式,我們稱之為面向腳本的繪圖方式
    2023-11-11

最新評論

商都县| 论坛| 内黄县| 内乡县| 双鸭山市| 津南区| 武冈市| 南昌市| 漠河县| 常德市| 夏河县| 岳普湖县| 公安县| 方山县| 西盟| 长岭县| 新郑市| 集贤县| 津南区| 永仁县| 潼南县| 绩溪县| 洮南市| 名山县| 梁山县| 绥中县| 那坡县| 乐平市| 安康市| 南昌市| 高台县| 永川市| 旅游| 浦东新区| 日土县| 平度市| 民乐县| 怀化市| 且末县| 子洲县| 伊通|