以下資訊是由ChatGPT協助生成:
在程式世界裡,
-
globals() 就像整個「水井村的地圖」🌏,記錄所有村子裡的名字(變數、函式、物件……)
-
locals() 就像「屋子裡的物品清單」🏠,只記錄某個房間(函式內部)的變數。
🏡範例 一、水井村全景地圖:globals()
水井村有許多居民與地標:烏龜、白馬、姻緣花。
這些都是「全域變數」,大家都能看到。
1 2 3 4 5 6 7 8 | # 水井村的全景地圖 village = "水井村" turtle = "烏龜" horse = "白馬" flower = "姻緣花" print("=== 水井村的全景地圖(globals) ===") print(globals().keys()) # 查看整個村子的地圖上有誰 |
執行結果:
=== 水井村的全景地圖(globals) ===
dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', '__file__', 'village', 'turtle', 'horse', 'flower'])
💡說明:
在這裡,它就像是整座村莊的登記簿。
globals() 會回傳一個字典(dict),裡面有所有全域變數的名字與內容。在這裡,它就像是整座村莊的登記簿。
🕳️ 範例二、進入烏龜的房間:locals()
現在,我們走進烏龜的房間。
裡面有牠自己的小物品(在地變數),這些東西村外的人看不到。
程式:
1 2 3 4 5 6 7 | def turtle_room(): food = "萵苣葉" toy = "石頭球" print("=== 烏龜房間裡的物品(locals) ===") print(locals()) # 查看房間裡的變數有哪些 turtle_room() |
執行結果:
=== 烏龜房間裡的物品(locals) ===
{'food': '萵苣葉', 'toy': '石頭球'}
💡說明:
locals() 只會顯示在函式內部定義的變數。
離開房間後,這些變數就不再存在。
🧭 範例三、結合使用:房間內外的界線
程式:
1 2 3 4 5 6 7 8 | treasure = "金井水" def white_horse(): tool = "竹掃帚" print("房間內能看到 globals 嗎?", "treasure" in globals()) print("房間內能看到 locals 嗎?", "tool" in locals()) white_horse() |
執行結果:
房間內能看到 globals 嗎? True
房間內能看到 locals 嗎? True
🧠 意思是:
函式裡面可以看到全村的變數(globals())。
但全村看不到你房間裡的私人物品(locals())。
💬 結論整理
名稱 範圍 比喻 說明
globals() 全域範圍 🌏 水井村地圖 存放所有村莊共用的資源
locals() 區域範圍 🏠 烏龜房間 存放函式內部的私有變數
可視範圍 函式內可看全域,全域看不到區域 🚪 單向門 保護變數,避免混亂
🎯 延伸任務(課堂練習)
請同學完成:
定義一個 love_story() 函式,裡面有 boy = "白馬"、girl = "姻緣花"。
- 在函式中列印出 locals()。
- 在外部列印出 globals()。
- 思考:函式外部能看到 boy 和 girl 嗎?
