2025年11月10日 星期一

[水井USR創新教材]Python一下用水井村故事學會 locals() 和 globals()

以下資訊是由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 = "姻緣花"。
  1. 在函式中列印出 locals()。
  2. 在外部列印出 globals()。
  3. 思考:函式外部能看到 boy 和 girl 嗎?

沒有留言:

張貼留言